Docker技术入门之---使用Dockerfile创建镜像(6)
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。
Dockerfile指令说明
指令 | 说明 |
FROM | 指定所创建镜像的基础镜像 |
MAINTAINER | 指定维护者信息 |
RUN | 运行命令 |
CMD | 指定启动容器时默认执行的命令 |
LABEL | 指定生成镜像的元数据便签信息 |
EXPOSE | 声明镜像内服务所监听的端口 |
ENV | 指定环境变量 |
ADD | 复制指定的<src>路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下 |
COPY | 复制本地主机的<src>路径下的内容到镜像中的<dest>路径下;一般情况下推荐使用COPY,而不是ADD |
ENTRYPOINT | 指定镜像的默认入口 |
VOLUME | 创建数据卷挂载点 |
USER | 指定运行容器时的用户名或UID |
WORKDIR | 配置工作目录 |
ARG | 指定镜像内使用的参数(例如版本号信息等) |
ONBULLD | 配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令 |
STOPSIGNAL | 容器退出的信号值 |
HEALTHCHECK | 如何进行监控检查 |
SHELL | 指定使用shell时的默认shell类型 |
下面分别进行介绍;
1.FROM
指定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub上下载指定镜像。
格式为:
FROM <image> 或
FROM <image>:<tag> 或
FROM <image>@<digest>
任何Dockerfile中的第一条指令必须为FROM指令。并且,如果在同一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一次)。
2.MAINTAINER
指定创建者信息,格式为MAINTAINER <name>.
例如;
MAINTAINER image_creator@docker.com
3.RUN
运行指定命令。
格式为:
RUN <command>或
RUN ["executable", "param1", "param2"]
4.CMD
CMD指令用来指定启动容器时默认执行的命令。它支持三种格式:
- CMD ["executable","param1","param2"]使用exec执行,是推荐使用的方式:
- CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用
- CMD ["param1","param2"]提供给ENTRYPOINT的默认参数
注意:每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时手动指定了运行的命令(作为run的参数),则会覆盖掉CMD指定的命令。
5.LABLE
LABEL指令用来指定生成镜像的元数据标签信息。
格式为:
LABEL <key>=<value>
6.EXPOSE
声明镜像内服务所监控的端口。
格式为;
EXPOSE <port>
例如;
EXPOSE 22 80 443
注意:该指令只是起到声明作用,并不会自动完成端口映射。在启动容器时需要使用-P,Docker主机会自动分配一个宿主机的临时端口转发到指定的端口;使用-p,则可以具体指定那个宿主机的本地端口会映射过来。
7.ENV
指定环境变量。
格式为:
ENV <key> <value> 或
ENV <key>=<value>
注意:指令指定的环境变量在运行时可以被覆盖掉,如docker run --env<key>=<value> built_image。
8.ADD
该命令将复制指定的<src>路径下的内容到容器中的<dest>路径下。
格式为:
ADD <src> <dest>
其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(如果是tar文件,会自动解压到<dest>路径下)。<dest>可以是镜像内的绝对路径,或者相对于工作目录WORKDIR的相对路径。
9.COPY
COPY和ADD都有复制功能,但是COPY对tar包没有解压功能,这点需要注意。
格式为:
COPY <src> <dest>
复制本地主机的<src> (为Dockerfile所在目录的相对路径,路径下的文件或目录)内容复制到镜像中的<dest>下。目录路径不存在时,会自动创建。
10.ENTRYPOINT
ENTRYPOINT和CMD命令不同之处是,使用ENTRYPOINT构建镜像,Docker run镜像时,可以对命令进行追加。而CMD命令追加后,会覆盖Dockerfile中的CMD命令。
11.VOLUME
创建一个数据卷挂载点。
格式为:
VOLUME ["/data"]
12.USER
指定运行容器时的用户名或UID,后续的RUN等指令也会使用指定的用户身份。
格式为:
USER daemon。
13.WORKDIR
为后续的RUN、CMD和ENTRYPOINT指令配置工作目录。
格式为WORKDIR/path/to/workdir.
14.ARG
指定一些镜像内使用的默认参数。
格式为 ARG <name> [=<default value>]
15.ONBUILD
配置所创建的镜像作为其他镜像的基础镜像。子镜像会继承父镜像中ONBUILD的内容。
格式为:
ONBUILD [INSTRUCTION]
16.STOPSIGNAL
指定所创建的镜像启动的容器接收退出的信号值。例如:
STOPSIGNAL signal
17.HEALTHCHECK
配置所启动容器如何进行进行监控检查(即如何判断监控与否),自Docker1.12开始支持。
格式有两种:
HEALTHCHECK [OPTIONS] CMD command :根据所执行命令返回值是否为0来判断;
HEALTHCHECK NONE;禁止基础镜像中的健康检查
OPTION支持:
--interval=DURATION(默认为:30s)过多久检查一次
--timeout=DURATION(默认为:30s)每次检查等待结果的超时
--retries=N(默认为;3)如果失败了,重试几次才最终确认失败。
18.SHELL
指定其他命令使用shell时的默认shell类型。
默认值为["/bin/sh","-c"].
创建镜像
编写完成Dockerfile之后,可以通过docker build命令来创建镜像。
命令格式;
docker build -f <dockerfile路径> -t <定义镜像名称:tag> .