Dockerfile

 

指令清单:

FROM,定义使用哪个基础镜像来启动构建流程。

MAINTAINER,声明镜像的创建者。

RUN,构建镜像的核心部分,定义需要做哪些事情来构建镜像。

ADD,将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压。

COPY,类似ADD的作用。

WORKDIR,设置当前工作目录,可定义多个,类似cd命令。

VOLUME,设置卷,挂载主机目录。

EXPOSE,指定对外暴露的端口

ENV,设置环境变量。

CMD,指定这个容器启动时候要运行的命令,只有最后一个生效,可被替代。

ENTRYPOINT,指定这个容器启动时候要运行的命令,可追加命令。

详解:

COPY

[--chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<> COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
<> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]

ADD

ADD 指令和 COPY 的使用格类似。功能也类似,不同之处如下:

<> ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

<> COPY的缺点:在不解压的前提下,无法复制 tar 压缩文件。

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

<> CMD 在docker run 时运行。

<> RUN 是在 docker build。

CMD为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。但是,如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

示例:

<1>,CMD <shell 命令>
<2>,CMD ["<可执行文件或命令>","<param1>","<param2>",...]    //一般使用这种格式
<3>,CMD ["<param1>","<param2>",...]   //该写法是为 “ENTRYPOINT” 指定的程序提供默认参数

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指定的程序。优点是在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。但需注意,如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

另外,ENTRYPINT可搭配CMD命令使用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。

示例:

FROM nginx

ENTRYPOINT ["nginx", "-c"]     //定参。不传参运行docker run,容器引用镜像默认的/etc/nginx/nginx.conf启动进程。
CMD ["/etc/nginx/change.conf"]     //变参。传参运行,引用新的conf文件。

<1>,不传参运行:docker run nginx:1.23.2,容器内会默认运行 nginx -c /etc/nginx/nginx.conf 来启动主进程。

<2>,传参运行:docker run nginx:1.32.2 -c /etc/nginx/change.conf ,容器内会默认运行 nginx -c /etc/nginx/change.conf 来启动主进程。

ENV 

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

<> ENV <key> <value>
<> ENV <key1>=<value1> <key2>=<value2>...

示例:

ENV MYPATH /usr/local

WORKDIR $MYPATH  

CMD ehco $MYPATH

ARG

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

使用构建命令 docker build 时,可以用 --build-arg <参数名>=<值> 来覆盖。

VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷;避免重要的数据,因容器重启而丢失,这是非常致命的; 避免容器不断变大。

格式:

<> VOLUME ["<路径1>", "<路径2>"...]
<> VOLUME <路径>

另外,使用docker run的时候,可以通过 -v 参数修改挂载点。

EXPOSE

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

格式:EXPOSE <端口1> <端口2>...

WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在,所以WORKDIR 指定的工作目录,必须是提前创建好的。docker build 构建镜像过程中的每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

格式:WORKDIR <工作目录路径>

USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

格式:USER <用户名>:<用户组>

HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

<> HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
<> HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

<> HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

结束。

posted @ 2022-12-07 11:57  巴州夜雨  阅读(15)  评论(0编辑  收藏  举报