Dockerfile指令
1、Dockerfile指令?
1)、COPY:类似ADD,将我们的文件拷贝到镜像中,也就是复制本地(宿主机)上的文件到镜像。
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
2)、ADD:复制并解压(宿主机)上的压缩文件到镜像。
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
3)、RUN:镜像构建的时候需要运行的命令,执行镜像里的命令,跟在Linux执行命令一样。
RUN ["executable", "param1", "param2"]
4)、CMD:容器启动后(docker run)执行的命令,多个CMD只会执行最后一个,可以被代替。
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...]
:该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
CMD指令指定的程序可被docker run命令行参数中指定要运行的程序所覆盖。
5)、ENTRYPOINT:容器启动后执行的命令,多个只会执行最后一个,可以追加命令。
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
在执行docker run的时候可以指定ENTRYPOINT运行所需的参数。
CMD跟ENTRYPOINT的区别:
CMD可以作为ENTRYPOINT的参数,且会被yaml文件里的command覆盖。
CMD跟RUN的区别:
CMD在docker run时运行,RUN是在docker build。
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
docker run nginx:test => nginx -c /etc/nginx/nginx.conf
docker run nginx:test -c /etc/nginx/new.conf => nginx -c /etc/nginx/new.conf
6)、ENV:构建的时候设置环境变量。
ENV <key1>=<value1> <key2>=<value2>...
7)、ARG:定义创建镜像过程中使用的变量,唯一一个可以在 FROM 之前定义。
ARG <参数名>[=<默认值>]
构建命令docker build中可以用–build-arg <参数名>=<值>来覆盖。
ARG与ENV作用一致,不过作用域不一样。ARG设置的环境变量仅对Dockerfile内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
docker中arg和env的区别是:
arg是在build的时候存在的,可以在dockerfile中当做变量来使用,而env是容器构建好之后的环境变量,不能在dockerfile中当参数使用。
8)、VOLUME:镜像挂载的目录,指定容器挂载点到宿主机自动生成的目录或其他容器。
VOLUME ["<路径1>", "<路径2>"...]
在启动容器docker run的时候,我们可以通过-v参数修改挂载点。
9)、EXPOSE:保留暴露的端口或者是声明容器的服务端口(仅仅是声明)。
EXPOSE <端口1> [<端口2>...]
10)、WORKDIR:镜像的工作目录,为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录,就是切换目录。
WORKDIR <工作目录路径>
11)、USER:为RUN、CMD和ENTRYPOINT执行命令指定运行用户。
USER <用户名>[:<用户组>]
12)、HEALTHCHECH:健康检查。
HEALTHCHECK [选项] CMD <命令>
: 设置检查容器健康状况的命令。
13)、ONBUILD:当构建一个被继承DockerFile的时候就会运行ONBUILD的指令,触发指令。它后面跟的是其它指令,比如RUN,COPY等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。
ONBUILD <其它指令>
14)、LABEL:用来给镜像添加一些元数据(metadata),以键值对的形式,替换MAINTAINER。
LABEL <key>=<value> <key>=<value> <key>=<value> ...
15)、MAINTAINER:已弃用,镜像维护者姓名或邮箱地址。
MAINTAINER <name>
16)、STOPSIGNAL:设置将发送到容器退出的系统调用信号。
STOPSIGNAL signal
17)、SHELL:覆盖用于命令的shell形式的默认shell。
SHELL ["executable", "parameters"]
18)、FROM:基础镜像或者称为基于某个镜像,一切从这里开始构建,FROM前面只能有一个或多个ARG指令。
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
本文对 Dockerfile指令进行了简单的介绍,Dockerfile指令的具体构建请参考:
使用Dockerfile构建镜像