概念

Dockerfile是一个文本文件

1.其中包含了一条条的指令
2.每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

作用:

1.对于开发人员:可以为开发团队提供一个完全一致的开发环境
2.对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
3.对于运维人员:在部署时,可以实现应用的无缝移植

关键字

关键字

作用

说明

FROM

指定父镜像

指定dockerfile基于那些image构建

MAINTAINER

作者信息

表面这个dockefile是谁写的

LABEL

标签

用来标明dockerfile的标签可以使用Label代替Maintainer最终都是在docker image基本信息中可以查看

RUN

执行命令

执行一段命令默认是/bin/sh,格式:RUN command或者RUN[“command” , “param1”,“param2”]

CMD

容器启动命令

提供启动容器时候的默认命令和ENTRYPOINT配合使用,格式:CMD command param1 param2或者CMD [“command” ,“param1”,“param2”]

ENTYPOINT

入口

一般在制作—些执行就关闭的容器中会使用

COPY

复制文件

build的时候复制文件到image中,添加本地的,但是不会去解压缩

ADD

添加文件

build的时候添加文件到image中,添加并且会去解压,不仅仅局限于当前build上下文,可以来源于远程服务

ENV

环境变量

指定build时候的环境变量可以在启动的容器的时候通过-e覆盖,格式ENVname=value

ARG

构建参数

构建参数,只在构建的时候使用的参数。如果有ENV那么ENV的相同名字的值始终覆盖arg的参数

VOLUME

定义外部可挂载的数据卷

指定build的image那些目录可以启动的时候挂载到文件系统中,启动容器的时候使用-v绑定,格式VOLUME[“目录”]

EXPOSE

暴露端口

定义容器运行的时候监听的端口,启动容器的使用-p来绑定暴露端口。格式:EXPOSE 8080,或者EXPOSE 8080/udp

WORKDIR

工作目录

指定容器内部的工作目录,如果没有创建则自动创建;如果指定/,使用的是绝对地址;如果不是/开头,那么是在上—条workdir的路径的相对路径

USER

指定执行用户

指定build或者启动的时候,用户在RUN CMD ENTRYPONT执行的时候的用户

HEAKLTHCHECK

接口检查

指定监测当前容器的健康监测的命令,基本上没用,因为很多时候应用本身有健康监测机制

ONBUILD

触发器

当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后,会执行ONBUILD的命令,但是不影响当前镜像,用处也不怎么大

STOPSIGNAL

发信号量到宿主机

该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。

SHELL

指定执行脚本的shell

指定RUN CMD ENTRYPOINT 执行命令的时候,使用的shell

LABLE

LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

比如我们可以添加镜像的作者:

LABEL org.opencontainers.image.authors="runoob"

COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:

COPY hom* /mydir/
COPY hom?.txt /mydir/

<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。