为了账号安全,请及时绑定邮箱和手机立即绑定

优化 Docker 构建:让开发更高效,利用构建缓存

请访问 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 文件

让你的团队能够从这个缓存中获益,如果你的团队使用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 构建缓存层的最佳方法
  1. 使用多阶段构建法:将 Dockerfile 分解成多个阶段以优化缓存效果。
  2. 减少层更改:将经常更改的指令放在一起,以减少缓存失效次数。
  3. 使用 .dockerignore:在构建过程中排除不必要的文件以加快构建速度。
  4. 定期更新缓存:定期重建并推送缓存以确保其与最新更改保持一致。
结论部分

利用 Docker 的构建缓存功能可以显著改善您的开发工作流程,通过减少构建时间并提高过程效率。通过在 Docker 注册表中存储和共享缓存,确保所有团队成员都能从中受益。实施这些做法将带来更快的构建速度、更高的生产力以及更顺畅的开发体验。

更多阅读

阅读原文 查看原文

知识栈 🎓

感谢您一直读到最后。在您离开之前,还有几句话要说:

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消