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