
Docker从入门到精通之Dockerfile详解
作者 |上海滩虎哥
来源 | 今日头条
Dockerfile详解
Dockerfile是一个构建镜像的文本文件,其中包含用户可以在命令行上调用组装镜像的所有命令,使用docker build构建
格式:
FROM
镜像构建初始阶段,指定构建的新镜像是从哪个基础镜像构建
RUN
执行命令,在构建镜像时执行,有以下2种格式:
shell格式
exec格式
注意:Dockerfile每执行一次都会在docker上新建一层,过多无意义的层,会导致镜像过于膨大
举例:
以上创建3层镜像,优化如下:
以&&符号连接命令,执行后只会创建一层镜像
LABEL
给镜像添加元数据,比如说镜像作者,以key-value形式声明
EXPOSE
指定容器监听的端口,可以指定TCP或UDP,默认是TCP
ENV
环境变量设置,值会持久化在镜像中,会产生一定副作用,ARG不会
ADD
复制文件、目录到镜像文件文件系统中,可使用通配符。该指令有以下两种格式
COPY
复制文件、目录到镜像文件文件系统中,可使用通配符。COPY与ADD类似,首选推荐使用COPY。COPY只支持本地文件或目录复制到容器中,而ADD会自动解压本地压缩文件。该指令有以下两种格式
ENTRYPOINT
容器启动时执行命令,有以下2种格式:
用例:
CMD
容器启动时执行命令,有以下2种格式:
- CMD ["executable","param1","param2"] (exec form, this is the preferred form)
- CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
- CMD command param1 param2 (shell form)
组合使用ENTRYPOINT和CMD, ENTRYPOINT指定默认的运行命令, CMD指定默认的运行参数.
用例:
ENTRYPOINT和CMD组合使用构建一个ping镜像,容器运行后默认ping localhost
构建ping镜像,并运行ping容器
VOLUME
VOLUME 方式挂载到宿主机上的是匿名卷,在宿主机上是自动匿名挂载到 /var/lib/docker/volumes/ 目录下
USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
WORKDIR
为容器指定工作目录,如果该目录不存在,则创建容器时会创建
ARG
定义一个变量,用户在构建镜像时使用docker build --build-arg =将变量传递给构造器。如果用户指定了未在Dockerfile中定义的构造参数,会输出警告。
用例:
