使用Dockerfile创建镜像

一、基本结构

Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来创建自定义的镜像。

一般Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动执行命令;一开始必须指明所基于的镜像名称,接下来一般是说明维护者信息,后面是镜像操作指令,最后是CMD指令,用来指定运行容器时的操作命令。

二、详细地操作指定说明

1、FROM 指定所创建镜像的基础镜像

如果本地不存在镜像,则默认去Docker Hub下载指定镜像,格式:FROM,或FROM:,或FROM@;任何Dockerfile中的第一条指令必须为FROM指令,并且,在同一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一次)。

2、MAINTAINER 指定维护者信息

3、RUN 运行指定命令

格式为:RUN或RUN ["executable", "paraml", "param2"];后一个指令会被解析为Json数组,因此必须用双引号。

前者默认在shell终端运行命令,即/bin/sh -c;后者则使用exec执行,不会启动shell环境。指定使用其他终端类型可以通过第二种方式实现,如:RUN ["/bin/bash", "-c", "echo hello"]。每条RUN命令将在当前惊醒的基础上执行指定命令,并提交为新的镜像。当命令较长可以使用\来换行。

4、CMD 用来指定启动容器时默认执行的命令

支持三种格式:

CMD ["executable","param1","param2"]使用exec执行

CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用

CMD ["param1","param2"]提供给ENTRYPOINT的默认参数

每个Dockerfile只能有一条CMD命令,如果指定多条命令,只有最后一条会被执行。如果启动容器是手动指定了运行的命令(作为run的参数),则会覆盖CMD指定的命令。

5、LABEL 用来指定生成镜像的元数据标签信息

格式:LABEL = = =...。

6、EXPOSE 生命镜像内服务所监听的端口

格式:EXPOSE

[

...]。

7、ENV 指定环境变量,在镜像生成过程中会被后续RUN指令使用,在镜像启动的容器中也会存在

格式:ENV或ENV=...。

指令指定的环境变量在运行时可以被覆盖掉,如docker run --env = built_image。

8、ADD 将复制指定的路径下的内容到容器中的路径下

格式:ADD

可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(如果tar文件,全自动解压到路径下)。可以是镜像内的绝版路径,或者相对于工作目录(WORKDIR)的相对路径。

9、COPY 格式:COPY

复制本地主机的(为Dockerfile所在目录的相对路径、文件或目录)下的内容到镜像中的下。目标路径不存在是,会自动创建。

路径同样支持正则格式。

当使用本地目录为源目录是,推荐使用COPY。

10、ENTRYPOINT 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数

支持两种格式:

ENTRYPOINT ["executable", "param1", "param2"](exec调用执行);

EXTRYPOINT command param1 param2(shell中执行)。

此时CMD指定值将作为根命令的参数。

每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个有效;在运行时,可以被--entrypoint参数覆盖掉。

11、VOLUME 创建一个数据卷挂载点

格式:VOLUME ["/data"]

可以从本地主机或其他容器挂载数据卷,一般用来存放数据库和需要保存的数据等。

12、USER 指定运行容器时的用户名或UID,后续的RUN等指令也会使用指定的用户身份

格式:USER daemon

当服务不需要管理员权限是,可以通过该命令指定运行用户,并且可以在之前创建所需要的用户;要临时获取管理员权限可以使用gosu或sudo。

13、WORKDIR 为后续的RUN、CMD和ENTRYPOINT指令配置工作目录

格式:WORKDIR /path/to/workdir

可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。

14、ARG 指定一些镜像内使用的参数(例如版本号信息等),这些参数在执行docker bulid命令时才以--build-arg=格式传入

格式:ARG[=];

则可以用docker build --build-arg=来指定参数值。

15、ONBUILD 配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令

格式:ONBUILD [INSTRUCTION];

如果基于image-A创建新的镜像时,新的Dockerfile中使用FROM image-A指定基础镜像,会自动执行ONBUILD指令的内容。

16、STOPSIGNAL 指定所创建镜像启动的容器接收退出的信号值

如:STOPSIGNAL signa1

17、HEALTHCHECK 配置所启动容器如何进行健康检查(如何判断健康与否),自Docker 1.12开始支持

格式有两种:

HEALTHCHECK [OPTIONS] CMD command:根据所执行命令返回值是否为0来判断;

HEALTHCHECK NONE:禁止基础镜像中的健康检查;

OPTION支持:

--interval=DURATION(默认为:30s):过多久检查一次;

--timeout=DURATION(默认为:30s):每次检查等待结果的超时;

--retries=N(默认为:3):如果失败了,重试几次才最终确定失败。

18、SHELL 指定其他命令使用shell时的默认shell类型

SHELL ["executable", "parameters"]

默认值为["/bin/sh", "-c"]。

对于Windows系统,建议在Dockerfile开头添加# excape='来指定转义信息。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180715G029NG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券