在现代软件开发中,Docker 已成为构建、发布和运行应用程序的基石。开发人员面临的主要挑战之一是优化构建时间,尤其是对于大型复杂应用程序而言。
Docker 构建缓存为这个问题提供了一个强大的解决方案,它允许您重用以前构建的层,从而显著加快了构建过程。
本文探讨如何为不同阶段(例如构建器阶段)创建和存储构建缓存,以及如何使用 Docker Registry 与您的团队共享此缓存。
什么是Docker 构建缓存
Docker 构建缓存是一种允许 Docker 重用先前构建的层的机制。Dockerfile 中的每条指令都会创建一个新层,Docker 会缓存这些层以避免重复工作。重建映像时,Docker 会检查是否可以重用任何缓存的层,这可以大大缩短构建时间。
多阶段构建和缓存
多阶段构建是 Docker 中的一项强大功能,可让您在 Dockerfile 中使用多个 FROM 语句。这使您能够创建中间阶段(例如构建器阶段),这些阶段可以缓存并独立重复使用。通过缓存这些阶段,您可以进一步优化构建过程。
设置Docker构建缓存
步骤 1:创建多阶段 Dockerfile
首先,创建一个包含多个阶段的 Dockerfile。以下是示例:
# Stage 1: Builder |
第 2 步:一些设置
在本地,您可能必须使用containerd才能使用缓存功能。
在Docker Desktop的设置中,在“常规”选项卡中,您必须启用“使用 containerd 来提取和存储图像Use containerd for pulling and storing images.”。
我还建议您添加这个环境变量:DOCKER_BUILDKIT=1
步骤 3:构建第一阶段并推送缓存
要构建映像并将缓存推送到 Docker Registry,请使用以下命令:
docker build --target builder \ |
因此,您构建了但并未推送,但仍有一些内容写入了我们的注册表。缓存层已写入您的注册表。
我们可以稍微调整一下我们的缓存选项,以压缩更多的层,从而减少存储占用的空间:compression=zstd,mode=max
docker build --target builder \ |
步骤 4:使用构建器的缓存构建第二阶段
docker build --cache-from=type=registry,ref=myregistry.com/myapp:cache-builder -t myapp:latest . |
您还可以将—cache-from和—cache-to与 Github Actions 结合使用: build-push-action
步骤 5:更新你的 docker-compose
如果您的团队使用 docker-compose,为了让他们从此缓存中受益,您只需在构建中添加:
version: '3.5' |
跨团队共享构建缓存
通过将构建缓存存储在 Docker Registry 中,您可以轻松地与团队共享它。这可确保每个人都能从缓存层中受益,从而缩短构建时间并提高生产力。
使用 Docker Build Cache 的最佳实践
- 使用多阶段构建:将 Dockerfile 分解为多个阶段以优化缓存。
- 最小化层变化:将频繁变化的指令组合在一起,以最大限度地减少缓存失效。
- 使用 .dockerignore :从构建上下文中排除不必要的文件以加快构建过程。
- 定期更新缓存:定期重建和推送缓存,以确保其与最新更改保持同步。
结论
利用 Docker 构建缓存可以显著改善您的开发工作流程,缩短构建时间并提高流程效率。通过在 Docker Registry 中存储和共享缓存,您可以确保所有团队成员都能从这些优化中受益。实施这些实践将加快构建速度、提高生产力并提供更流畅的开发体验。