Docker 备忘录: Docker Dockerfile 格式 Docker 命令 Docker Compose Docker Swarm Docker 文件格式 FROM 用法: FROM FROM : FROM @ 信息: FROM 必须是 Dockerfile 中第一个非注释指令。 可以在单个 Dockerfile 中多次使用 FROM,以创建多个镜像。只需在每个新的 FROM 指令之前记录上一个 FROM 指令输出的最后镜像ID。 标签或摘要值是可选的。如果省略它们中的任何一个,默认为 latest。如果无法匹配标签值,构建器将返回错误。 引用 - 最佳实践 MAINTAINER 用法: MAINTAINER MAINTAINER 指令允许您设置生成镜像的作者字段。
用法:
FROM <镜像> FROM <镜像>:<标签> FROM <镜像>@<摘要>
信息:
引用 - 最佳实践
用法:
MAINTAINER <名称>
MAINTAINER 指令允许您设置生成镜像的作者字段。
引用
用法:
RUN <命令> (shell 形式,命令将在 shell 中运行,默认情况下在 Linux 上为 /bin/sh -c,在 Windows 上为 cmd /S /C) RUN ["<可执行文件>", "<参数1>", "<参数2>"] (exec 形式)
信息:
exec 形式使得可以避免 shell 字符串操作,并且可以使用不包含指定 shell 可执行文件的基础镜像运行命令。 shell 形式的默认 shell 可以通过 SHELL 指令进行更改。 使用 exec 形式时不会发生正常的 shell 处理。例如,RUN ["echo", "$HOME"] 不会对 $HOME 进行变量替换。
引用 - 最佳实践
用法:
CMD ["<可执行文件>", "<参数1>", "<参数2>"] (exec 形式,这是首选形式) CMD ["<参数1>", "<参数2>"] (作为 ENTRYPOINT 的默认参数) CMD <命令> <参数1> <参数2> (shell 形式)
信息:
CMD 的主要目的是为运行中的容器提供默认值。这些默认值可以包括可执行文件,也可以不包括可执行文件,在这种情况下,您还必须指定 ENTRYPOINT 指令。 Dockerfile 中只能有一个 CMD 指令。如果您列出多个 CMD,则只有最后一个 CMD 生效。 如果 CMD 用于为 ENTRYPOINT 指令提供默认参数,则 CMD 和 ENTRYPOINT 指令应使用 JSON 数组格式指定。 如果用户在 docker run 中指定参数,则它们将覆盖 CMD 中指定的默认值。 使用 exec 形式时不会发生正常的 shell 处理。例如,CMD ["echo", "$HOME"] 不会对 $HOME 进行变量替换。
引用 - 最佳实践
用法:
LABEL <键>=<值> [<键>=<值> ...]
信息:
LABEL 指令向镜像添加元数据。 要在 LABEL 值中包含空格,请使用引号和反斜杠,就像在命令行解析中一样。 包括 FROM 镜像中的 LABEL 是累加的。 如果 Docker 遇到已存在的标签/键,则新值将覆盖具有相同键的所有先前标签。 要查看镜像的标签,请使用 docker inspect 命令。它们将位于 "Labels" JSON 属性下。
引用 - 最佳实践
用法:
EXPOSE <端口> [<端口> ...]
信息:
向 Docker 通知容器在运行时监听指定网络端口。 EXPOSE 不会使容器的端口对主机可用。
引用 - 最佳实践
用法:
ENV <键> <值> ENV <键>=<值> [<键>=<值> ...]
信息:
ENV 指令将环境变量 <键> 设置为 <值>。 该值将是所有后续“后代” Dockerfile 命令的环境,并且可以在行内替换。 使用 ENV 设置的环境变量将在从结果镜像运行容器时持久存在。 第一种形式将以值设置一个单一变量,其中第一个空格之后的所有字符串都被视为 <值> - 包括空格和引号等字符。
引用 - 最佳实践
用法:
ADD <源> [<源> ...] <目标> ADD ["<源>", ... "<目标>"] (此形式适用于包含空格的路径)
信息:
将新文件、目录或远程文件 URL 从 <源> 复制并添加到图像文件系统的 <目标> 路径。 <源> 可能包含通配符,匹配将按照 Go 的 filepath.Match 规则进行。 如果 <源> 是文件或目录,则它们必须相对于正在构建的源目录(即构建上下文)。 <目标> 是绝对路径,或者相对于 WORKDIR 的路径。 如果 <目标> 不存在,它及其路径中所有缺失的目录将被创建。
引用 - 最佳实践
用法:
COPY <源> [<源> ...] <目标> COPY ["<源>", ... "<目标>"] (此形式适用于包含空格的路径)
信息:
将新文件或目录从 <源> 复制并添加到图像文件系统的 <目标> 路径。 <源> 可能包含通配符,匹配将按照 Go 的 filepath.Match 规则进行。 <源> 必须相对于正在构建的源目录(即构建上下文)。 <目标> 是绝对路径,或者相对于 WORKDIR 的路径。 如果 <目标> 不存在,它及其路径中所有缺失的目录将被创建。
引用 - 最佳实践
用法:
ENTRYPOINT ["<可执行文件>", "<参数1>", "<参数2>"] (exec 形式,推荐) ENTRYPOINT <命令> <参数1> <参数2> (shell 形式)
信息:
允许您配置一个容器,使其作为可执行文件运行。 docker run <镜像> 的命令行参数将附加在 exec 形式的 ENTRYPOINT 的所有元素之后,并将覆盖使用 CMD 指定的所有元素。 shell 形式会阻止任何 CMD 或运行命令行参数的使用,但 ENTRYPOINT 将通过 shell 开始。这意味着可执行文件不会成为 PID 1,也不会接收 UNIX 信号。前缀 exec 可以解决这个缺点。 Dockerfile 中只有一个 ENTRYPOINT 指令会产生效果。
引用 - 最佳实践
用法:
VOLUME ["<路径>", ...] VOLUME <路径> [<路径> ...]
创建一个带有指定名称的挂载点,并将其标记为从宿主机或其他容器中挂载外部卷的位置。
引用 - 最佳实践
用法:
USER <用户名 | 用户ID>
USER 指令设置运行镜像时以及其后在 Dockerfile 中的任何 RUN、CMD 和 ENTRYPOINT 指令所使用的用户名或用户ID。
引用 - 最佳实践
用法:
WORKDIR </工作目录路径>
信息:
为任何随后的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。 它可以在一个 Dockerfile 中多次使用。如果提供了相对路径,则相对于前一个 WORKDIR 指令的路径。
引用 - 最佳实践
用法:
ARG <名称>[=<默认值>]
信息:
定义一个变量,用户可以在构建时通过 docker build 命令使用 --build-arg <变量名>=<值> 标志传递给构建器。 可以通过多次指定 ARG 来定义多个变量。 不建议使用构建时变量来传递秘密,如 GitHub 密钥、用户凭据等。使用 docker history 命令可以看到构建时变量值。 使用 ENV 指令定义的环境变量始终覆盖具有相同名称的 ARG 指令。 Docker 有一组预定义的 ARG 变量,您可以在没有相应 ARG 指令的情况下在 Dockerfile 中使用。 HTTP_PROXY 和 http_proxy HTTPS_PROXY 和 https_proxy FTP_PROXY 和 ftp_proxy NO_PROXY 和 no_proxy
引用
用法:
ONBUILD <Dockerfile 指令>
信息:
在镜像稍后用作另一个构建的基础时,向镜像添加一个触发指令。触发指令将在下游构建的上下文中执行,就好像它被插入到下游 Dockerfile 中 FROM 指令之后一样。 任何构建指令都可以注册为触发指令。 触发指令仅由“子”构建继承。换句话说,它们不会被“孙子”构建继承。 ONBUILD 指令可能不会触发 FROM、MAINTAINER 或 ONBUILD 指令。
引用 - 最佳实践
用法:
STOPSIGNAL <信号>
STOPSIGNAL 指令设置将发送给容器以退出的系统调用信号。该信号可以是一个与内核的系统调用表位置匹配的有效无符号数字,例如 9,或者是一个以 SIGNAME 格式的信号名称,例如 SIGKILL。
引用
用法:
HEALTHCHECK [<选项>] CMD <命令> (通过在容器内运行命令检查容器健康状况) HEALTHCHECK NONE (禁用从基础镜像继承的任何健康检查)
信息:
告诉 Docker 如何测试容器以检查它是否仍在工作。 每当健康检查通过时,它将变为健康状态。经过一定数量的连续失败后,它将变为不健康状态。 可以出现的 <选项> 有... --interval=<持续时间>(默认:30秒) --timeout=<持续时间>(默认:30秒) --retries=<次数>(默认:3次) 健康检查将在容器启动后间隔秒后首次运行,并且每次之前的检查完成后再次运行。如果单次运行检查的时间超过超时秒,则认为检查失败。需要连续 retries 次健康检查失败才会使容器被认为是不健康的。 Dockerfile 中只能有一个 HEALTHCHECK 指令。如果您列出多个指令,则只有最后一个 HEALTHCHECK 有效。 <命令> 可以是 shell 命令或 exec JSON 数组。 命令的退出状态指示容器的健康状态。 0:成功 - 容器处于健康状态并且可以使用 1:不健康 - 容器未正常工作 2:保留 - 不要使用此退出代码 命令的前 4096 个字节的标准输出和标准错误将被存储,并且可以通过 docker inspect 查询。 当容器的健康状态发生变化时,将生成带有新状态的 health_status 事件。
引用
用法:
SHELL ["<可执行文件>", "<参数1>", "<参数2>"]
信息:
允许覆盖命令 shell 形式的默认 shell。 每个 SHELL 指令覆盖所有先前的 SHELL 指令,并影响所有后续指令。 允许使用其他 shell,例如 zsh、csh、tcsh、powershell 等。
基本 Docker 命令
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。