0%

Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

主要指令

指令 行为
FROM 定制的镜像都是基于 FROM 的镜像,例如nginx
WORKDIR 指定下面的shell语句指定运行在哪个路径下
COPY 将宿主机下的目录文件复制到镜像中去
RUN 执行后面跟着的命令行命令
CMD 指定整个镜像运行起来后执行的脚本 (一般都是阻塞式的脚本)
1
2
3
4
5
FROM alpine
WORKDIR /app
COPY src/ /app
RUN echo 321 >> 1.txt
CMD tail -f 1.txt

COPY vs ADD

两者功能差不多,但是ADD的源文件除了是本地文件资源,还可以是一个url

CMD vs ENTRYPOINT

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 –entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

在 Dockerfile 文件的存放目录下,通过docker build -t <镜像名>:<版本号>命令来执行。

当两者混用时

  • entrypoint非json,则以entrypoint为准。
  • 如果entrypoint和cmd都是json,则以entrypoint+cmd拼接成的shell为准。

expose

expose仅仅只是声明端口。

作用:

  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

作用:

  • 避免重要的数据,因容器重启而丢失,这是非常致命的。
  • 避免容器不断变大。

ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

ARG

构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

label

标识(没实际作用)

onbuild

onbuild env C = 10

在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build

资料

Dockerfile
Dockerfile用法全解析