Docker 可以通过从 Dockerfile 包含所有命令的文本文件中读取指令自动构建镜像,以便构建给定镜像。

FROM

FROM用以选择一个基础镜像构建当前镜像,推荐使用Alpine镜像,因为它被严格控制并保持最小尺寸(约5MB),但它仍然是一个完整的发行版。

  1. FROM Alpine

LABEL

添加标签来帮助组织镜像、记录许可信息、辅助自动化构建等。每个标签一行,由 LABEL 开头加上一个或多个标签对。

  1. #方式一:
  2. LABEL cn.ligeek.app.version="0.0.1-beta"
  3. LABEL cn.ligeek.app.release-date="2019-05-05"
  4. 方式二:
  5. LABEL cn.ligeek.app.version="0.0.1-beta" \
  6. cn.ligeek.app.release-date="2019-05-05" \

RUN

用于执行shell命令,通过在基础镜像上执行shell完成新的镜像。每执行一条会创建一层新的镜像。

1、务必将RUN apt-get update 和 apt-get install 组合成一条 RUN 声明 2、apt-get update ,upgarde 和dist-upgrade 区别 update:下载源中的metadata信息,包含软件包的种类及版本 upgrade:系统将现有的Package升级,若依赖关系改变则拒绝升级 dist-upgrade:智能升级现有软件。 例如:软件包 a 依赖 b c d,但最新版本中 a 依赖 b c e。这种情况下,dist-upgrade 会删除 d 安装 e,并把 a 软件包升级,而 upgrade 会认为依赖关系改变而拒绝升级 a 软件包。

  1. #方式一(仅创建1层镜像,推荐)
  2. RUN apt-get update && apt-get install -y curl nginx
  3. #方式二(创建2层镜像)
  4. RUN apt-get update && apt-get install -y curl
  5. RUN apt-get update && apt-get install -y nginx

ARG

格式:ARG <参数名>[=<默认值>]
Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值。
该默认值可以在构建命令 docker build 中用 —build-arg <参数名>=<值> 来覆盖。

CMD

用于定义默认执行目标镜像中的软件和参数。此命令会在容器启动且 docker run 没有指定其他命令时运行。

  1. #Exec 格式
  2. CMD ["executable", "param1", "param2"...]
  3. #shell格式
  4. CMD command param1 param2
  5. #举例,默认创建交互环境
  6. CMD ["/bin/bash"]
  7. #距离,默认输出

设定镜像默认执行命令,非必定执行

CMD [“echo”,”hello word”]

运行容器 docker run -it [image] 将输出:Hello world
若执行 docker run -it [image] /bin/bash 将会忽略默认命令

ENTRYPOINT

用于定义默认执行目标镜像中的软件和参数。此命令一定会运行。

  1. #Exec 格式,当前参数为必定执行,可通过CMD ["param1","param2"] 追加默认参数,非必定执行
  2. ENTRYPOINT ["executable", "param1", "param2"]
  3. #shell 格式
  4. ENTRYPOINT command param1 param2

设定镜像默认执行命令,必定执行

ENTRYPOINT [“/bin/echo”, “Hello”]
CMD [“world”]

运行容器 docker run -it [image] 将输出:Hello world
若执行 docker run -it [image] Baby 将输出:Hello Baby

EXPOSE

用于声明容器对外暴露的端口。暴露操作需要在run时候用-p或-P指定。

  1. #声明指定端口
  2. EXPOSE 80 443 8080
  3. #声明端口范围
  4. EXPOSE 8000-9000

ADD 和 COPY

用于向镜像中添加文件。ADD 可以添加文件、目录、url资源,也可以将tar压缩包中文件提取到景象中。COPY 只能复制本地文件。

  1. #ADD
  2. ADD http://ligeek.cn/a.jpg hello/hello.jpg tomcat.tar.gz(将提取压缩包内容而非压缩包本身)
  3. #COPY
  4. COPY a.jpg hello/hello.jpg

VOLUME

用于暴露镜像中的可变部分,和用户可以改变的部分。操作为:从镜像中复制指定卷的文件夹到本地/var/lib/docker/volumes/xxxxxxxxx/文件夹,然后把本地的该文件夹挂载到容器里面去。若需明确挂载到主机的位置,需在运行容器时使用 -v [host-dir]:[container-dir]:[rw|wo]

  1. VOLUME ["/dir_1","/dir_2"]

移除已删镜像自动创建的挂载目录

docker volume rm $(docker volume ls -qf dangling=true)

WORKDIR

指定命令在容器中工作目录,该目录可用于RUN, CMD, ENTRYPOINT, COPY 和 ADD 指令。可以是绝对目录,也可以是相对目录。建议绝对路径

  1. WORKDIR /root

ONBUILD

为镜像添加触发器,可以使用inspect查看。当该镜像被作为其他Dockerfile中FROM指令的参数时,ONBUILD注册的指令会按顺序执行,构建完成后,触发器指令被删除。注意ONBUILD不能嵌套。