为云构建优化

Docker Build Cloud 远程运行您的构建,而不是在您调用构建的机器上。这意味着客户端和构建器之间的文件传输是通过网络进行的。

通过网络传输文件比本地传输具有更高的延迟和更低的带宽。Docker Build Cloud 有几个功能来缓解这个问题:

  • 它使用附加的存储卷作为构建缓存,这使得读取和写入缓存非常快速。
  • 将构建结果加载回客户端时,仅拉取与之前构建相比发生变化的层。

尽管有这些优化,对于大型项目或网络连接较慢的情况,远程构建仍然可能导致上下文传输和镜像加载缓慢。以下是一些可以优化构建以使其传输更高效的方法:

有关如何优化构建的更多信息,请参阅 构建最佳实践

Dockerignore 文件

使用 .dockerignore 文件, 你可以明确指定哪些本地文件不希望包含在构建上下文中。在忽略文件中指定的通配符模式匹配到的文件不会被传输到远程构建器。

你可能想要添加到你的.dockerignore文件中的一些例子是:

  • .git — 在构建上下文中跳过发送版本控制历史。注意 这意味着你将无法在构建步骤中运行 Git 命令, 例如 git rev-parse
  • 包含构建产物的目录,例如二进制文件。在开发过程中本地创建的构建产物。
  • 用于包管理器的供应商目录,例如 node_modules

一般来说,你的.dockerignore文件的内容应该与你在.gitignore中的内容相似。

Slim 基础镜像

在您的Dockerfile中选择较小的镜像用于FROM指令可以帮助减少最终镜像的大小。Alpine镜像是一个很好的最小化Docker镜像的例子,它提供了您期望从Linux容器中获得的所有操作系统工具。

还有一个 特殊的 scratch 镜像, 它完全不包含任何内容。例如,对于创建静态链接的二进制文件的镜像非常有用。

多阶段构建

多阶段构建 可以使您的构建运行得更快, 因为各个阶段可以并行运行。它还可以使最终结果更小。 编写您的 Dockerfile 时,确保最终的运行时阶段使用尽可能小的基础镜像, 仅包含您的程序运行所需的资源。

也可以 从其他镜像或阶段复制资源, 使用Dockerfile的COPY --from指令。这种技术可以减少 最终阶段中的层数以及这些层的大小。

在构建中获取远程文件

如果可能的话,你应该在构建过程中从远程位置获取文件,而不是将文件打包到构建上下文中。直接在Docker Build Cloud服务器上下载文件更好,因为这可能比通过构建上下文传输文件更快。

你可以在构建过程中使用 Dockerfile ADD 指令, 或者在RUN指令中使用像wgetrsync这样的工具来获取远程文件。

多线程工具

你在构建指令中使用的一些工具可能默认不会利用多核。一个这样的例子是make,它默认使用单线程,除非你指定make --jobs=选项。对于涉及此类工具的构建步骤,尝试检查是否可以通过并行化来优化执行。