针对在云中构建进行优化

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

通过网络传输文件具有更高的延迟和较低的带宽 比本地转账。Docker Build Cloud 具有多项功能来缓解这种情况:

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

尽管进行了这些优化,但远程构建仍然会产生缓慢的上下文 传输和镜像加载,适用于大型项目,或者如果网络连接为 慢。以下是一些可以优化构建以进行转移的方法 更高效:

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

Dockerignore 文件

使用.dockerignore文件, 您可以明确说明您不想在 构建上下文。文件由您在 ignore-file 不会传输到远程构建器。

您可能希望添加到.dockerignore文件是:

  • .git— 跳过在 build 上下文中发送版本控制历史记录。注意 这意味着您将无法在构建步骤中运行 Git 命令, 如git rev-parse.
  • 包含生成构件(如Binaries)的目录。生成工件 在开发过程中在本地创建。
  • 软件包管理器的供应商目录,例如node_modules.

通常,您的.dockerignorefile 应该类似于 你的.gitignore.

Slim 基础镜像

为您的FROMinstructions 中的 Dockerfile 可以 帮助减小最终镜像的大小。Alpine 镜像是提供所有作系统的最小 Docker 镜像的一个很好的示例 您期望从 Linux 容器获得的实用程序。

还有特殊scratch镜像, 它什么都没有。用于创建静态链接的镜像 Binaries。

多阶段构建

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

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

在 build 中获取远程文件

如果可能,您应该从构建中的远程位置获取文件。 而不是将文件捆绑到 build 上下文中。在 Docker Build Cloud 服务器直接更好,因为它可能会更快 而不是使用 build 上下文传输文件。

您可以在构建过程中使用Dockerfile 文件ADD指令, 或在您的RUN使用工具的说明wgetrsync.

多线程工具

您在构建说明中使用的某些工具可能不会使用多个 cores 的 intent 来获取。一个这样的例子是make它使用单个线程 default,除非您指定make --jobs=<n>选择。对于构建步骤 涉及此类工具,请尝试检查是否可以使用 并行。