Dockerfile 指令详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dockerfile 指令详解相关的知识,希望对你有一定的参考价值。
使用Dockerfile
docker build [选项] <上下文路径/URL/->
其他构建方法
直接用Git repo 进行构建
用给定的tar压缩包构建
从标准输入中读取Dockerfile进行构建
从标准输入中读取上下文压缩包进行构建
FROM指定基础镜像
是必备指令,必须是第一条指令
FROM就是指定基础镜像
LABEL
镜像添加标签来帮助组织镜像、记录许可信息、辅助自动化构建等
一个镜像可以包含多个标签,但建议将多个标签放入到一个 LABEL 指令中
RUN 执行指令
shell 格式 RUN 命令
exec格式 RUN ["可执行文件","参数1","参数2"]
支持Shell类的行尾添加 的命令换行 首位#进行注释
最后添加清理工具的命令,删除为了编译所构建所需的软件
COPY复制文件
COPY <源路径>...<目标路径>
COPY ["<源路径1>",..."<目标路径>"]
ADD更加高级的复制文件
<源路径> 可以是一个URL,这种情况下会去下载这个链接文件放到<目标路径>去,并设置文件权限为600
如果<源路径> 为一个tar 压缩文件的话,压缩格式为gzip,bzip2以及xz
CMD容器启动命令 (只可出现一次)
shell 格式 CMD <命令>
exec 格式 CMD ["可执行文件","参数1","参数2"....]
参数列表格式 CMD ["参数1","参数2"... ]. 在指定了ENTRYPOINT指令后,用CMD指定具体的参数
CMD指令就是用于指定默认的容器主进程的启动命令
在运行时可以指定新的命令来替代镜像设置中的这个默认名利
shell格式 相当于 exec格式 CMD ["sh","-c","shell 命令"]
ENTRYPOINT 入口点(只可出现一次)
是将CMD的内容作为参数传给ENTRYPOINT
<ENTRYPOINT> "<CMD>"
使用CMD时加个参数可能会遇到报错 希望在容器运行,就必须重新输入完整命令
使用ENTRYPOINT 就可以避免
启动容器就是启动主进程,有些时候,启动主进程前,需要一写准备工作
可以将这些预处理的工作写成一个脚本,放在ENTRYPOINT中执行
ENV 设置环境变量
ENV <key><value>
ENV <key1>=<value1><key2>=<value2>
定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
ARG 构建参数
ARG <参数名> [=< 默认值>]
构建参数和ENV 的效果一样,都是设置环境变量
ARG所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的
VOLUME 定义匿名卷
VOLUME ["<路径1>","<路径2>"...]
VOLUME <路径>
事先制定某些目录挂载为匿名卷
EXPOSE 声明端口
EXPOSE <端口1>[<端口2>...]
声明运行容器提供服务端口。
-p 是映射宿主机端口和容器端口,就是将容器对应端口服务公开给外界访问
EXPOSE仅仅是声明容器打算使用什么端口
WORKDIR 指定工作目录
WORKDIR <工作目录路径>
WORKDIR 指令可以来指定工作目录(当前目录)目录不存在,会自动建立
USER 指定当前用户
USER <用户名>
切换到指定用户,这个用户必须是事先建立好的,否则无法切换
HEALTHCHECK 健康检查 (只可出现一次)
HEALTHCHECK [选项] CMD <命令> 设置检查容器健康状态的命令
HEALTHCHECK NONE 屏蔽掉基础镜像健康检查指令
设置好后 启动容器,初始状态为starting 在指令检查成功后 变为 healthy 有一定次数失败变为unhealthy
--interval=<间隔> 两次健康检查的间隔,默认30S
--timeout=<时长> 健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认30秒
--retries=<次数> 当连续失败指定次数后,则将容器是为unhealthy,默认3次
分为 shell 格式 和 exec 格式
命令的返回值决定健康检查的成功与否 0:成功 1:失败 2:保留
ONBUILD 为他人做嫁衣
ONBUILD <其它指令> 比如 RUN COPY 等
在当前镜像构建时并不会被执行,只有被当成基础镜像去构建下一级镜像的时候才会被执行
以上是关于Dockerfile 指令详解的主要内容,如果未能解决你的问题,请参考以下文章