指令清单:
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 的用法。
结束。
标签:容器,run,CMD,nginx,ENTRYPOINT,docker,Dockerfile From: https://www.cnblogs.com/liusingbon/p/16962692.html