优化 Docker Offload 使用
Docker Offload 在远程运行您的构建,而不是在您调用构建的机器上。这意味着文件必须通过网络从您的本地系统传输到云端。
与本地传输相比,通过网络传输文件会带来更高的延迟和更低的带宽。为了减少这些影响,Docker Offload 包含了几项性能优化:
- 它使用附加存储卷作为构建缓存,这使得读写缓存速度很快。
- 将构建结果拉回本地机器时,它只传输自上次构建以来发生更改的层。
即使进行了这些优化,大型项目或较慢的网络连接仍可能导致更长的传输时间。以下是优化 Docker Offload 构建设置的几种方法:
有关 Dockerfile 的一般提示,请参阅构建最佳实践。
dockerignore 文件
.dockerignore 文件让您可以指定哪些本地文件不应包含在构建上下文中。在构建过程中,这些模式排除的文件将不会上传到 Docker Offload。
通常要忽略的项目:
.git– 避免传输您的版本历史。(注意:您将无法在构建中运行git命令。)- 构建工件或本地生成的二进制文件。
- 依赖文件夹,例如
node_modules,如果这些在构建过程中恢复。
根据经验,您的 .dockerignore 应该类似于您的 .gitignore。
精简基础镜像
FROM 指令中较小的基础镜像可以减小最终镜像大小并提高构建性能。alpine 镜像是最小化基础的一个很好的例子。
对于完全静态的二进制文件,您可以使用scratch,这是一个空的基础镜像。
多阶段构建
多阶段构建允许您在 Dockerfile 中分离构建时和运行时环境。这不仅可以减小最终镜像的大小,还可以在构建过程中并行执行阶段。
使用 COPY --from 从早期阶段或外部镜像复制文件。这种方法有助于最大程度地减少不必要的层并减小最终镜像大小。
在构建中获取远程文件
如果可能,请在构建本身期间从互联网下载大文件,而不是将它们捆绑在您的本地上下文中。这可以避免客户端到 Docker Offload 的网络传输。
您可以使用以下方式完成此操作:
- Dockerfile
ADD指令 RUN命令,例如wget、curl或rsync
多线程工具
一些构建工具,例如 make,默认是单线程的。如果工具支持,请将其配置为并行运行。例如,使用 make --jobs=4 同时运行四个作业。
利用云中可用的 CPU 资源可以显著缩短构建时间。