zoukankan      html  css  js  c++  java
  • Docker的自动构建镜像

    Dockerfile自动构建docker镜像
    类似ansible剧本,大小几kb
    手动做镜像:大小几百M+
    dockerfile 支持自定义容器的初始命令

    dockerfile主要组成部分:
     基础镜像信息       FROM  centos:6.9
     制作镜像操作指令   RUN yum install openssh-server -y
     容器启动时执行指令 CMD ["/bin/bash"]
    dockerfile常用指令:
     FROM 这个镜像的妈妈是谁?(指定基础镜像)
     MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
     LABLE      描述,标签
     
     RUN 你想让它干啥(在命令前面加上RUN即可)
     ADD 给它点创业资金(会自动解压tar)  制作docker基础的系统镜像
     WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
     VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
     EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
     CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
     
    dockerfile其他指令: 
     COPY 复制文件(不会解压)rootfs.tar.gz
     ENV  环境变量
     ENTRYPOINT  容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
    参考其他的dockerfile
    官方dockerfile或者时速云镜像广场
    [root@localhost centos6.9_ssh_nginx]# pwd
    /opt/dockerfile/centos6.9_ssh_nginx
    [root@localhost centos6.9_ssh_nginx]# cat dockerfile
    FROM centos:6.9
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN yum -y install openssh-server nginx unzip
    RUN service sshd start
    RUN echo "123456"|passwd --stdin root
    RUN rm -rf /usr/share/nginx/html/index.html
    ADD xiaoniaofeifei.zip /usr/share/nginx/html/
    RUN unzip /usr/share/nginx/html/xiaoniaofeifei.zip -d /usr/share/nginx/html/
    ADD init.sh /init.sh
    CMD ["/bin/bash","/init.sh"]
    
    [root@localhost centos6.9_ssh_nginx]# cat init.sh
    #!/bin/bash
    
    service sshd restart
    nginx -g 'daemon off;'
    
    创建镜像
    docker build --network=host -t centos6.9_nginx_ssh:v1 .
    
    [root@localhost centos6.9_ssh_nginx]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    centos6.9_nginx_ssh   v1                  f01eeebf918a        9 minutes ago       431MB
    

    优化上述dockerfile文件:

    FROM centos:6.9
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN yum -y install openssh-server nginx unzip
    RUN service sshd start
    RUN echo "123456"|passwd --stdin root
    WORKDIR /usr/share/nginx/html      这里指的是之后所有命令都在这个路径下面执行
    RUN rm -rf * 
    ADD xiaoniaofeifei.zip .  这里最后是点不能忘记了,表示在当前目录
    RUN unzip xiaoniaofeifei.zip
    
    ADD init.sh /init.sh
    
    CMD ["/bin/bash","/init.sh"]

     执行创建案之后的命令结果是:

    [root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v2 .
    Sending build context to Docker daemon  94.72kB
    Step 1/12 : FROM centos:6.9
     ---> adf829198a7f
    Step 2/12 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
     ---> Using cache
     ---> bcfa68985b33
    Step 3/12 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
     ---> Using cache
     ---> de91b8df3cdc
    Step 4/12 : RUN yum -y install openssh-server nginx unzip
     ---> Using cache
     ---> 66bb9530d868
    Step 5/12 : RUN service sshd start
     ---> Using cache
     ---> 5974df83e839
    Step 6/12 : RUN echo "123456"|passwd --stdin root
     ---> Using cache
     ---> d8cbe019d081
    Step 7/12 : WORKDIR /usr/share/nginx/html
     ---> Using cache
     ---> e4bf78b38489
    Step 8/12 : RUN rm -rf *
     ---> Using cache
     ---> a7040fa17ab7
    Step 9/12 : ADD xiaoniaofeifei.zip .
     ---> dcc79248a09f
    Step 10/12 : RUN unzip xiaoniaofeifei.zip
     ---> Running in cbca6d5ca592
    Archive:  xiaoniaofeifei.zip
      inflating: sound1.mp3
       creating: img/
      inflating: img/bg1.jpg
      inflating: img/bg2.jpg
      inflating: img/number1.png
      inflating: img/number2.png
      inflating: img/s1.png
      inflating: img/s2.png
      inflating: 21.js
      inflating: 2000.png
      inflating: icon.png
      inflating: index.html
    Removing intermediate container cbca6d5ca592
     ---> f4a99a6a7128
    Step 11/12 : ADD init.sh /init.sh
     ---> 455bf5fe6902
    Step 12/12 : CMD ["/bin/bash","/init.sh"]
     ---> Running in e5caf5424a18
    Removing intermediate container e5caf5424a18
     ---> 6307e23ee16d
    Successfully built 6307e23ee16d
    Successfully tagged centos6.9_nginx_ssh:v2
    [root@localhost centos6.9_ssh_nginx]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
    centos6.9_nginx_ssh   v2                  6307e23ee16d        About a minute ago   431MB
    centos6.9_nginx_ssh   v1                  f01eeebf918a        16 minutes ago       431MB
    
    [localhost centos6.9_ssh_nginx]# docker run -d -p 80:80 -p 2222:22 centos6.9_nginx_ssh:v2
    277d3714590b9b9faaba1b682790c694bcc96f0868293d5505b69848f8d03421
    [root@localhost centos6.9_ssh_nginx]# docker exec -it 277d37145 /bin/bash
    [root@277d3714590b html]# pwd
    /usr/share/nginx/html    从这里就可以看出目录由于设定了WORKDIR,所以钉死在了这个目录下面
    

    在上面可以看出任然还有可以优化的地方,所以继续,使用ADD命令可以直接解压tar包

    FROM centos:6.9
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN yum -y install openssh-server nginx
    RUN service sshd start
    RUN echo "123456"|passwd --stdin root
    WORKDIR /usr/share/nginx/html
    RUN rm -rf *
    ADD xiaoniaofeifei.tar.gz .        ADD可以直接解压tar包
    ADD init.sh /init.sh
    
    CMD ["/bin/bash","/init.sh"]
    
    
    
    [root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v3 .
    Sending build context to Docker daemon  186.9kB
    Step 1/11 : FROM centos:6.9
     ---> adf829198a7f
    Step 2/11 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
     ---> Using cache
     ---> bcfa68985b33
    Step 3/11 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
     ---> Using cache
     ---> de91b8df3cdc
    Step 4/11 : RUN yum -y install openssh-server nginx
     ---> Using cache
     ---> 16a434cf89be
    Step 5/11 : RUN service sshd start
     ---> Using cache
     ---> 60f03276a66c
    Step 6/11 : RUN echo "123456"|passwd --stdin root
     ---> Using cache
     ---> b4dc176a311b
    Step 7/11 : WORKDIR /usr/share/nginx/html
     ---> Using cache
     ---> 209c253860e4
    Step 8/11 : RUN rm -rf *
     ---> Using cache
     ---> d8ca4eff7ee9
    Step 9/11 : ADD xiaoniaofeifei.tar.gz .
     ---> 139914b243cb
    Step 10/11 : ADD init.sh /init.sh
     ---> 482f2582dd02
    Step 11/11 : CMD ["/bin/bash","/init.sh"]
     ---> Running in 66b1794dbe6e
    Removing intermediate container 66b1794dbe6e
     ---> 92b1087df3f5
    Successfully built 92b1087df3f5
    Successfully tagged centos6.9_nginx_ssh:v3
    [root@localhost centos6.9_ssh_nginx]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
    centos6.9_nginx_ssh   v3                  92b1087df3f5        About a minute ago   431MB
    centos6.9_nginx_ssh   v2                  6307e23ee16d        19 minutes ago       431MB
    centos6.9_nginx_ssh   v1                  f01eeebf918a        35 minutes ago       431MB
    

     企业标准化EXPOSE

    FROM centos:6.9
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN yum -y install openssh-server nginx
    RUN service sshd start
    RUN echo "123456"|passwd --stdin root
    WORKDIR /usr/share/nginx/html
    RUN rm -rf *
    ADD xiaoniaofeifei.tar.gz .
    ADD init.sh /init.sh
    
    EXPOSE 80/tcp 22/tcp
    CMD ["/bin/bash","/init.sh"]
    
    [root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v4 .
    Sending build context to Docker daemon  186.9kB
    Step 1/12 : FROM centos:6.9
     ---> adf829198a7f
    Step 2/12 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
     ---> Using cache
     ---> bcfa68985b33
    Step 3/12 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
     ---> Using cache
     ---> de91b8df3cdc
    Step 4/12 : RUN yum -y install openssh-server nginx
     ---> Using cache
     ---> 16a434cf89be
    Step 5/12 : RUN service sshd start
     ---> Using cache
     ---> 60f03276a66c
    Step 6/12 : RUN echo "123456"|passwd --stdin root
     ---> Using cache
     ---> b4dc176a311b
    Step 7/12 : WORKDIR /usr/share/nginx/html
     ---> Using cache
     ---> 209c253860e4
    Step 8/12 : RUN rm -rf *
     ---> Using cache
     ---> d8ca4eff7ee9
    Step 9/12 : ADD xiaoniaofeifei.tar.gz .
     ---> Using cache
     ---> 139914b243cb
    Step 10/12 : ADD init.sh /init.sh
     ---> Using cache
     ---> 482f2582dd02
    Step 11/12 : EXPOSE 80/tcp 22/tcp
     ---> Running in 4a9a9c270afc
    Removing intermediate container 4a9a9c270afc
     ---> b980eead4bdc
    Step 12/12 : CMD ["/bin/bash","/init.sh"]
     ---> Running in fc73bab98352
    Removing intermediate container fc73bab98352
     ---> ac9eca43049a
    Successfully built ac9eca43049a
    Successfully tagged centos6.9_nginx_ssh:v4
    
    [root@localhost centos6.9_ssh_nginx]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    centos6.9_nginx_ssh   v4                  ac9eca43049a        45 seconds ago      431MB
    centos6.9_nginx_ssh   v3                  92b1087df3f5        11 minutes ago      431MB
    centos6.9_nginx_ssh   v2                  6307e23ee16d        29 minutes ago      431MB
    centos6.9_nginx_ssh   v1                  f01eeebf918a        45 minutes ago      431MB
    [root@localhost centos6.9_ssh_nginx]# docker run -d -P centos6.9_nginx_ssh:v4
    697030125c669ee2e92ae09111833eec38cc00ba9ee367140de97ebcf95fbe00
    [root@localhost centos6.9_ssh_nginx]# docker ps -al
    CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS  PORTS                                          NAMES
    697030125c66        centos6.9_nginx_ssh:v4   "/bin/bash /init.sh"   2 minutes ago       Up 2 minutes  0.0.0.0:32769->22/tcp, 0.0.0.0:32768->80/tcp   flamboyant_hoover
    

    由上可知,加入了EXPOSE以后就能看到容器的端口出现随机映射的现象 

    volume的意义:

    [root@localhost centos6.9_ssh_nginx]# vim dockerfile
    
    FROM centos:6.9
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    RUN yum -y install openssh-server nginx
    RUN service sshd start
    RUN echo "123456"|passwd --stdin root
    WORKDIR /usr/share/nginx/html
    RUN rm -rf *
    ADD xiaoniaofeifei.tar.gz .
    ADD init.sh /init.sh
    
    EXPOSE 80/tcp 22/tcp
    VOLUME /usr/share/nginx/html
    CMD ["/bin/bash","/init.sh"]
    
    [root@localhost centos6.9_ssh_nginx]# docker run -d -P centos6.9_nginx_ssh:v5 .
    [root@localhost centos6.9_ssh_nginx]# docker volume ls DRIVER VOLUME NAME local b56d4c1f5042c2f7c2e8afd4e53f4f6c0ac9a1c09d12c5dd81ab40c783e09f07 产生一个随机的卷

      

      

      

  • 相关阅读:
    Selenium之编辑框操作
    Selenium之勾选框操作
    Selenium之单选框操作
    [复习资料]组合计数学习笔记
    ARC104游记
    [被踩计划] 题解 [省选联考 2020 A 卷] 作业题
    题解 [SEERC2019]Game on a Tree
    [被踩计划] 题解 [NOI2020]美食家
    [被踩计划] 题解 [省选联考 2020 A 卷] 组合数问题
    [被踩计划] 题解 括号树
  • 原文地址:https://www.cnblogs.com/nshgo/p/11134644.html
Copyright © 2011-2022 走看看