引言
在频繁使用Docker
技术的当下,构建Docker
镜像是日常开发中的基本技能了,自然我们就需要会编写Dockerfile
文件,下面将详细介绍一下常用的Dockerfile
指令,算是做一个备忘录吧。
- 指令必须是大写
- 每一个指令会创建一个新的镜像层
Dockerfile常用指令
FROM
# 构建所需的基础镜像(已下载),格式:
# --platform指定构建的平台,默认使用构建的目标平台(可选)
# image基础镜像
# name给使用镜像取一个别称,供后面指令使用
# tag指定基础镜像的标签,默认当前版本(可选)
# digest指定基础镜像的摘要,默认当前版本(可选)
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
复制代码
RUN
# 构建时需要运行的命令
# shell形式,可以使用变量
RUN <command>
# exec形式,不可以使用变量
RUN ["executable", "param1", "param2"]
复制代码
EXPOSE
# 通知 Docker 容器在运行时侦听指定的网络端口。可以指定端口是监听TCP还是UDP,如果不指定协议,默认为TCP。
EXPOSE <port> [<port>/<protocol>...]
复制代码
ENV
# 设置全局的环境变量
ENV <key>=<value> ...
复制代码
ADD
# 复制文件到指定位置(会自动解压压缩包)
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
复制代码
COPY
# 复制文件到指定位置
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
复制代码
VOLUME
# 创建一个具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷。该值可以是 JSON 数组、带有多个参数的纯字符串
VOLUME ["/data"]
复制代码
WORKDIR
# 指定进入容器后的工作目录
WORKDIR /path/to/workdir
复制代码
ENTRYPOINT
# 指定容器启动时要运行的命令,可以追加命令
# exec形式,首选
ENTRYPOINT ["executable", "param1", "param2"]
# shell形式
ENTRYPOINT command param1 param2
复制代码
CMD
# 指定容器启动时要运行的命令,不可以追加命令,会重写命令
# exec形式,首选
CMD ["executable","param1","param2"]
# 作为ENTRYPOINT的默认参数
CMD ["param1","param2"]
# shell形式
CMD command param1 param2
复制代码
USER
# 指定容器运行时要使用的用户名
USER <user>[:<group>]
USER <UID>[:<GID>]
复制代码
ARG
# 定义一个变量,可以在构建或Dockerfile指令中使用
ARG <name>[=<default value>]
# 在Dockerfile文件指令中使用
ARG version=latest
ARG user=root
FROM node:$version
USER $user
# 在构建镜像命令中使用
ARG version
ARG user
docker build --build-arg version=1.0.0 user=root -t qiuqfang/node .
复制代码
SHELL
# 允许覆盖用于命令的 shell 形式的默认 shell
SHELL ["executable", "parameters"]
# 在Windows上比较常用,cmd 与 powershell是两种不同的shell
# Windows中 cmd 为默认shell,Write-Host 为 powershell 中的命令,需加上 powershell -command
RUN powershell -command Write-Host hello world
# 切换默认的shell为powershell
SHELL ["powershell", "-command"]
# 切换后,则可以直接使用 Write-Host 输出 hello world
RUN Write-Host hello world
# 切换默认的shell为cmd
SHELL ["cmd", "/S", "/C"]
复制代码
ONBUILD
# 将一个触发指令添加到图像中
ONBUILD <INSTRUCTION>
复制代码
STOPSIGNAL
# 设置将发送到容器退出的系统调用信号
STOPSIGNAL signal
复制代码
HEALTHCHECK
# 通过在容器内运行命令来检查容器健康状况
HEALTHCHECK [OPTIONS] CMD command
# 禁用从基础镜像继承的任何健康检查
HEALTHCHECK NONE
复制代码
\
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END