一、指令集
ADD
ADD
添加本地或远程文件和目录。
ARG
ARG
使用构建时变量,唯一可以位于 FROM 之前的指令。(不支持环境变量)
CMD
CMD
指定默认命令。(不支持环境变量)
COPY
COPY
复制文件和目录。
ENTRYPOINT
ENTRYPOINT
指定默认可执行文件。(不支持环境变量)
ENV
ENV
设置环境变量。更改变量的值仅在后续指令中生效。
EXPOSE
EXPOSE
描述您的应用程序正在侦听哪些端口。
FROM
FROM
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
从基础镜像创建一个新的构建阶段,可以在单个 Dockerfile 中出现多次,以创建多个映像或使用一个构建阶段作为另一个构建阶段的依赖项,可以通过将 AS name 添加到 FROM 指令来为新的构建阶段指定名称,tag 或 digest 值是可选的。如果省略其中任何一个,构建器默认采用 latest 标记。如果构建器找不到 tag 值,则会返回错误。
HEALTHCHECK
HEALTHCHECK
在启动时检查容器的运行状况。(不支持环境变量)
LABEL
LABEL
将元数据添加到图像。
MAINTAINER
MAINTAINER
指定图像的作者。(不支持环境变量)
ONBUILD
ONBUILD
指定在构建中使用映像时的说明。
RUN
RUN
# Shell form:
RUN [OPTIONS] <command> ...
# Exec form:
RUN [OPTIONS] [ "<command>", ... ]
执行构建命令(不支持环境变量),指令的缓存在下一次构建期间不会自动失效,可以使用 --no-cache 标志使 RUN 指令的缓存失效,例如 docker build --no-cache。
可使用的[OPTIONS]:
–mount
RUN --mount=[type=<TYPE>][,option=<value>[,option=<value>]...]
TYPE
bind
绑定挂载上下文目录(只读)。
- target
cache
挂载临时目录以缓存编译器和包管理器的目录。
tmpfs
在构建容器中安装 tmpfs 。
secret
允许构建容器访问安全文件(例如私钥),而无需将其烘焙到映像中。
ssh
允许构建容器通过 SSH 代理访问 SSH 密钥,并支持密码短语。
–network
–security
SHELL
SHELL
设置图像的默认外壳。(不支持环境变量)
STOPSIGNAL
STOPSIGNAL
指定退出容器的系统调用信号。
USER
USER
设置用户和组 ID。
VOLUME
VOLUME
创建卷挂载。
WORKDIR
WORKDIR
更改工作目录。
二、解析器指令
syntax
# syntax=[remote image reference]
用于构建的 Dockerfile 语法版本。如果未指定,BuildKit 将使用 Dockerfile 前端的捆绑版本。
eg
# syntax=docker/dockerfile:1
# syntax=docker.io/docker/dockerfile:1
# syntax=example.com/user/repo:tag@sha256:abcdef...
escape
用于转义 Dockerfile 中的字符的字符。如果未指定,默认转义字符为 \
eg
# escape=\
Or
# escape=`
三、环境变量
${variable:-word}
如果设置了variable,结果为word;
${variable:+word}
如果没设置variable,结果为word,否则为空字符串;
${variable#pattern}
从 variable 中删除 pattern 的最短匹配,从字符串的开头查找;
eg
str=foobarbaz echo ${str#f*b} # arbaz
${variable##pattern}
从 variable 中删除 pattern 的最长匹配项,从字符串的开头查找;
eg
str=foobarbaz echo ${str##f*b} # az
${variable%pattern}
从 variable 中删除 pattern 的最短匹配,从字符串末尾向后查找;
eg
string=foobarbaz echo ${string%b*} # foobar
${variable%%pattern}
从 variable 中删除 pattern 的最长匹配项,从字符串末尾向后查找;
eg
string=foobarbaz echo ${string%%b*} # foo
${variable/pattern/replacement}
将 variable 中第一次出现的 pattern 替换为 replacement;
eg
string=foobarbaz echo ${string/ba/fo} # fooforbaz
${variable//pattern/replacement}
将 variable 中出现的所有 pattern 替换为 replacement;
eg
string=foobarbaz echo ${string//ba/fo} # fooforfoz
三、注意事项
1.指令不区分大小写。
2.Dockerfile必须以FROM开头,前面只能有一个或多个ARG
指令。
3.pattern 是一个全局模式,其中 ? 匹配任何单个字符, * 匹配任意数量的字符(包括零)。要匹配文字 ? 和 * ,请使用反斜杠转义: ? 和 *,您可以通过在变量前添加 \ 来转义整个变量名称:例如, $foo 或 ${foo} 将转换为 $foo 并且 ${foo} 分别是文字。
。