优化云构建
Docker Build Cloud 远程运行您的构建,而不是在您调用构建的机器上运行。这意味着客户端和构建器之间的文件传输会通过网络进行。
通过网络传输文件比本地传输具有更高的延迟和更低的带宽。Docker Build Cloud 具有几个缓解此问题的功能
- 它使用附加的存储卷来存储构建缓存,这使得缓存的读取和写入速度非常快。
- 将构建结果加载回客户端只拉取与先前构建相比已更改的层。
尽管进行了这些优化,但远程构建仍然可能导致缓慢的上下文传输和镜像加载,尤其对于大型项目或网络连接缓慢的情况。以下是一些优化构建以提高传输效率的方法
有关如何优化构建的更多信息,请参阅 构建最佳实践.
Dockerignore 文件
使用 .dockerignore
文件,您可以明确指定不想包含在构建上下文中的本地文件。忽略文件中的 glob 模式指定的任何文件都不会传输到远程构建器。
您可能想要添加到 .dockerignore
文件的一些示例包括
.git
— 跳过将版本控制历史记录发送到构建上下文。请注意,这意味着您将无法在构建步骤中运行 Git 命令,例如git rev-parse
。- 包含构建工件(例如二进制文件)的目录。在本地开发过程中创建的构建工件。
- 包管理器的供应商目录,例如
node_modules
。
通常,.dockerignore
文件的内容应与 .gitignore
文件中的内容类似。
精简基础镜像
为 Dockerfile 中的 FROM
指令选择较小的镜像可以帮助减小最终镜像的大小。 Alpine 镜像 是一个提供您对 Linux 容器期望的所有操作系统实用程序的最小 Docker 镜像的好例子。
还有 特殊的 scratch
镜像,它不包含任何内容。例如,用于创建静态链接二进制文件的镜像。
多阶段构建
多阶段构建 可以使您的构建运行得更快,因为阶段可以并行运行。它还可以使您的最终结果更小。以这样的方式编写您的 Dockerfile,使最终的运行时阶段使用尽可能小的基础镜像,并且只包含程序运行所需的资源。
还可以使用 Dockerfile COPY --from
指令 从其他镜像或阶段复制资源。此技术可以减少最终阶段中的层数以及这些层的尺寸。
在构建中获取远程文件
在可能的情况下,您应该从远程位置获取构建中的文件,而不是将文件捆绑到构建上下文中。直接在 Docker Build Cloud 服务器上下载文件更好,因为它可能比使用构建上下文传输文件更快。
您可以在构建期间使用 Dockerfile ADD
指令 或在 RUN
指令中使用 wget
和 rsync
等工具来获取远程文件。
多线程工具
您在构建指令中使用的某些工具可能默认情况下不会利用多个内核。一个这样的例子是 make
,它默认情况下使用单个线程,除非您指定 make --jobs=<n>
选项。对于涉及此类工具的构建步骤,请尝试检查是否可以通过并行化来优化执行。