主要有两种方式制作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