自定义Docker镜像

主要有两种方式制作Docker镜像:docker commit和docker file

1. docker commit

  先进入一个启动的容器,对容器做些修改,如下图所示,我们为容器安装了ifconfig命令:

       

        然后,我们退出容器,并将当前的容器commit成一个新的镜像:

       

 2. 通过docker file生成新镜像

   通过docker build docker文件,可以生成新镜像,相比于docker commit更加灵活。

          这里先介绍一些常用的docker file 命令:

          FROM: 属于哪个镜像

          MAINTAINER: 作者

          COPY:复制文件,接相对路径

          ADD: 复制文件,但是遇到压缩文件会自动解压,而COPY不会

         WORKDIR:设置工作目录,如果指定的目录不存在会自动创建

          ENV: 设置环境变量

          RUN、ENTRYPOINT、CMD:执行命令,但是有所区别。

                     区别1: RUN在构建镜像时执行, 而ENTRYPOINT和CMD在容器启动的时候执行。

                     区别2:当ENTRYPOINT和CMD出现多条时,只执行最后一条指令

                     区别3:CMD可以作为参数传递给ENTRYPOINT,在启动容器的时候,可以通过后接参数替换CMD的值。

           例子1: 

    

 

 

     

 

     

 

 

     通过以上三张图可以看出,RUN的指令在构建容器时执行,而ENTRYPOINT的指令在启动容器时执行,那么CMD出了什么问题呢? 让我们修改下dockerfile

                

 

     这时候,我们再执行docker run,可以看出CMD和ENTRYPOINT都起作用了

                

 

     例子2(多个CMD和多个ENTRYPOINT):

                

 

                

 

                可以看出,CMD和ENTRYPOINT都只执行了最后一条。

                例子3( CMD作为ENTRYPOINT的参数):

                

     

 

                 当然,也可以在启动容器替换CMD参数,执行如下命令: docker run mycentos:v2 aux

                 

 

                 例子4( VOLUME文件挂载):

                  首先在dockerfile使用VOLUME指令

                   

 

                   构建镜像后启动容器

                   

 

                   进入容器后,找到Mounts,在Source下看到宿主机被挂载的目录

                   

 

      在宿主机对应目录下创建test文件夹,在容器能看到新创建的test文件夹

                   

 

 

  

posted @ 2021-09-11 21:10  gengone  阅读(436)  评论(0编辑  收藏  举报