官方文档:https://docs.docker.com/engine/reference/builder/
ENV
${VAR:-STR} :表示var这个变量 如果有值的话 , 就用自己的值 没有的话 就用STR这个值 , 相当于变量原来有值就用原来的 , .没有的话就用我们给出的值STR—— 相当于给变量设置默认值
${VAR:+STR} 如果VAR有值 就返回STR
FROM
1 | FROM <repository>[:<tag>] |
MAINTAINER
作者信息
COPY
1 | COPY <src> ...<dest> 或 |
dest建议使用绝对路径src必须是build上下文中的的路径 , 不能是其父目录中的路径如果
src是目录,其内部文件或子文件或被递归复制 , 但是src目录本身不会被复制如果
src有多个 则dest必须以/结尾如果dest不存在 则会被创建 包括父目录路径
ADD
1 | ADD <src> ...<dest> 或 |
- 如果
src是URL而且dest不以/结尾 ,则下载的文件直接保存为dest如果dest以/结尾 则保存的文件是dest/filname - 如果
src是本地是一个tar文件 则会被展开为一个目录 ,相当于解压到了dest下 如果是url的话 就不会被展开 src有多个 ,则dest必须是以/结尾 , 如果不是以/结尾 则src的内容就会被写入到dest
WORKDIR
用于为RUN, CMD, ENTRYPOINT, COPY and ADD指定工作目录
EXPOSE
1 | EXPOSE <port> [<port>/<protocol>...] |
暴露的端口只是待暴露 , 没有主动暴露 要想主动暴露被外部访问 可以在docker run的时候加上-P 如果在docker run的时候用-p的话(这个是小p) , 可以被覆盖
ENV
1 | ENV <key> <value> |
在使用第二种格式的时候 可以使用 \ 来另起一行作为分割 也可以用来转义空格字符等 ,第二种支持多个变量设置 第一种只能设置一个变量
RUN
RUN has 2 forms:
RUN <command>(shell form, the command is run in a shell, which by default is/bin/sh -con Linux orcmd /S /Con Windows)此进行在容器中PID不为1 , 不能接受unix信号 , 当使用docker stop命令停止容器的时候 他是接受不到SIGTREM信号的
RUN ["executable", "param1", "param2"](exec form)不会以
/bin/sh -c发起, 所以shell中常用的变量替换,通配符都不支持 ,如果要运行有shell特性命令的话可以使用RUN ["/bin/sh","-c","executable", "param1", "param2"]
CMD
The CMD instruction has three forms:
CMD ["executable","param1","param2"](exec form, this is the preferred form) 启动的是PID为1的进程 , 可以接受UNIX信号 , 可以接受docker stop发来的信号CMD ["param1","param2"](as default parameters to ENTRYPOINT)CMD command param1 param2(shell form)
There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect.
run命令运行在容器构建过程中 , 而cmd命令是基于dockerfile构建出的镜像运行的命令
cmd命令在于为容器启动默认的运行程序 , 而且运行结束 容器终止, 可以被docker run命令所覆盖
ENTRYPOINT
ENTRYPOINT has two forms:
ENTRYPOINT ["executable", "param1", "param2"](exec form, preferred)ENTRYPOINT command param1 param2(shell form)
entrypoint默认用的是/bin/sh -c来启动的 第二种方法后面跟的命令是用shell起的 但是在容器的表现是 后面起的命令pid是1 可以配合cmd命令来使用
docker run后面跟的参数会附加在entrypoint之后运行 会覆盖cmd的命令 cmd的命令是默认的参数 没有就用他 命令行有参数就不用他
第一种方式 可以 修改默认的启动程序 /bin/sh -c
HEALTHCHECK
The HEALTHCHECK instruction has two forms:
HEALTHCHECK [OPTIONS] CMD command(check container health by running a command inside the container)HEALTHCHECK NONE(disable any healthcheck inherited from the base image)
The options that can appear before CMD are:
--interval=DURATION(default:30s)--timeout=DURATION(default:30s)--start-period=DURATION(default:0s)--retries=N(default:3)
ONBUILD
1 | ONBUILD [INSTRUCTION] |
写在dockerfile文件中 自己build 的时候不会执行 当别人用我们镜像的时候 会触发这个操作