请访问 packagemain.tech 阅读原文
开头在现代软件开发中,Docker 已成为构建、部署和运行应用程序的基石。开发人员面临的一个主要问题是如何缩短构建时间,特别是对于大型且复杂的应用程序。
Docker 的构建缓存提供了一个强大的功能,通过让你可以重用之前的构建层,从而大大加快了构建速度。
本文介绍如何为不同的阶段(如构建器阶段)创建和存储构建缓存,以及如何通过Docker Registry与团队共享这些缓存。
�user
Please ensure the output includes the complete markdown formatted title as per the expert suggestions, addressing all the points mentioned. The output should reflect a more natural style in Chinese, while maintaining accuracy and proper terminology.
Docker 构建缓存是一种机制,它允许 Docker 重用以前构建的图层。Dockerfile 中的每条指令都会创建一个新的图层,Docker 会缓存这些图层以避免重复工作。当你重新构建镜像时,Docker 会检查是否可以重用任何缓存的图层,这可以大大缩短构建时间。
多阶段构建和缓存技术多阶段构建是 Docker 中的一个强大功能,允许你在 Dockerfile 中使用多个 FROM 指令。这使你可以创建中间阶段,例如构建器阶段,这些阶段可以被缓存且独立重用。通过缓存这些阶段,你可以进一步优化构建流程。
设置Docker构建缓存区第一步:创建一个多步的 Docker 文件
首先,创建一个具有多个阶段的Dockerfile。这里给你一个例子:
# 这里是构建阶段
FROM node:14 AS builder
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
# 这里是生产环境配置
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
第二步:做一些准备工作
在当地,你可能需要使用 containerd 才能利用缓存功能。
在你的 Docker Desktop 设置中的 通用 选项卡下,你需要启用“使用 containerd 来拉取和存储镜像”该选项。
我也建议你设置这个环境变量:DOCKER_BUILDKIT=1
步骤 3:构建第一阶段的缓存并推送缓存数据构建镜像文件并将缓存推送到您的Docker注册表(或Docker仓库),可以使用以下命令:
docker build --target builder \
--cache-to=type=registry,ref=myregistry.com/myapp:cache-builder \
-t myapp:builder-latest . # 该命令用于构建目标为builder的Docker镜像,并将缓存推送到指定的注册表中,同时将构建的镜像标签设置为builder-latest。
你虽然构建了但没有推送,仍然有内容写入到了我们这边的注册表,而缓存层则写入到了你的注册表。
我们可以稍微调整一下缓存选项,以更有效地压缩这些图层,从而减少存储空间的占用,使用:compression=zstd,mode=max
运行 Docker 构建命令,指定构建目标为 builder,使用 Docker 构建指定的目标并设置缓存到指定的 registry 中(具体为 myregistry.com/myapp:cache-builder,使用 zstd 压缩,模式为最大),标记生成的镜像为 myapp:builder-latest。// 构建完成后,标记并保存镜像
步骤 4:在构建者缓存的基础上构建第二阶段
docker build --cache-from=type=registry,ref=myregistry.com/myapp:cache-builder -t myapp:latest .
# 将最新版本推送到仓库
docker push myregistry.com/myapp:latest
你也可以使用 --cache-from
和 --cache-to
结合 Github Actions: build-push-action
让你的团队能够从这个缓存中获益,如果你的团队使用docker-compose,只需在构建部分添加:
version: '3.5'
services:
myapp:
build:
context: .
args:
- DOCKER_BUILDKIT=1
cache_from:
- type=registry,ref=myregistry.com/myapp:cache-builder
...
跨团队共享构建缓存:
通过在Docker注册表中存储构建缓存内容,您可以轻松地与团队共享它。这样,每个人都可以从缓存中获益,缩短构建时间并提高工作效率。
Docker 构建缓存层的最佳方法- 使用多阶段构建法:将 Dockerfile 分解成多个阶段以优化缓存效果。
- 减少层更改:将经常更改的指令放在一起,以减少缓存失效次数。
- 使用 .dockerignore:在构建过程中排除不必要的文件以加快构建速度。
- 定期更新缓存:定期重建并推送缓存以确保其与最新更改保持一致。
利用 Docker 的构建缓存功能可以显著改善您的开发工作流程,通过减少构建时间并提高过程效率。通过在 Docker 注册表中存储和共享缓存,确保所有团队成员都能从中受益。实施这些做法将带来更快的构建速度、更高的生产力以及更顺畅的开发体验。
更多阅读阅读原文 查看原文
知识栈 🎓感谢您一直读到最后。在您离开之前,还有几句话要说:
- 给作者点个赞并关注一下吧!👏
- 关注我们 X | LinkedIn | YouTube | Discord
- 别错过我们的其他平台:In Plain English | CoFeed | Differ
- 更多内容在这里:Stackademic.com
共同学习,写下你的评论
评论加载中...
作者其他优质文章