写点什么

亚马逊云科技在 ECR 中引入远程构建缓存以加速 Docker 镜像构建

作者:Craig Risi

  • 2025-11-21
    北京
  • 本文字数:1883 字

    阅读完需:约 6 分钟

大小:948.84K时长:05:23
亚马逊云科技在ECR中引入远程构建缓存以加速Docker镜像构建

亚马逊云科技宣布对其 CodeBuild 服务进行增强,允许团队使用 Amazon ECR(Elastic Container Registry)作为远程 Docker 层缓存,显著减少 CI/CD 管道中的镜像构建时间。组织可以利用 ECR 仓库持久化和在运行之间复用构建层的能力,跳过重建容器的未更改部分并加速交付。

 

博客概述了Docker BuildKit支持如何使---cache-from 和---cache-to 等命令指向基于 ECR 的缓存镜像,允许 CodeBuild 启动的构建从先前的运行中拉取缓存层,并将更新的缓存层推回到 ECR。结果,当基础层保持不变时,重建可以跳过 Dockerfile 中的大部分内容,改善开发者反馈循环并减少构建资源消耗。

 

亚马逊云科技强调这种方法解决了基于容器的 CI/CD 的主要瓶颈之一:主要来自重复构建重依赖层的漫长重建时间。远程缓存模型补充了现有的本地缓存选项,并提供了一个更可靠、全局的缓存,跨越频繁构建和多个代理。

 

要实现该解决方案,用户需要配置他们的构建管道,将代表缓存的镜像(通常使用单独的标签)推送到 ECR,然后在后续构建中引用它。随着时间的推移,随着缓存的积累,构建持续时间显著下降,因为 Docker 引擎绕过了未更改的层。亚马逊云科技指出,缓存的有效性取决于变更如何通过 Dockerfile 传播以及缓存结构的优劣;多阶段构建和层排序等优化会增强收益。

 

设置很简单。开发者创建一个 ECR 仓库来存储缓存的镜像层,授予 CodeBuild 权限以推送和拉取,以及在他们的构建环境中启用 BuildKit。从那里开始,CodeBuild 可以在构建新层之前自动从 ECR 拉取先前构建的层,并在构建完成后将更新的缓存层推回到 ECR。这个过程大大减少了冗余重建,提高了构建效率和开发者生产力。

 

一个典型的配置涉及在项目的 buildspec.yml 中定义环境变量和命令。在预构建阶段,CodeBuild 与 ECR 进行身份验证,并在后者存在时拉取缓存镜像。构建阶段运行 Docker,启用 BuildKit,指定 ECR 缓存作为层复用的源和目的地。在后构建阶段,更新的缓存层被推回到 ECR,以供将来构建使用。

 

根据这篇博客文章,早期采用者报告了大量节省时间,以前需要 10-15 分钟的构建现在在缓存复用较高时不到五分钟就完成了。一个用户发文介绍了他们将构建时间从 6 分钟减少到 2 分钟的经历,这就是这个新功能的成果。对于依赖大型依赖层或多阶段 Docker 构建的项目,改进尤其明显。亚马逊云科技指出,最佳性能取决于一致的 Dockerfile 层排序和频繁的缓存刷新,以避免陈旧的依赖。

 

这种方法使亚马逊云科技与更广泛的行业趋势保持一致,即更智能的缓存和可重现的构建。竞争者的 CI/CD 提供商,如 GitHub Actions 和 GitLab CI,也提供远程缓存解决方案,GitHub 通过其 Actions Cache 服务,GitLab 通过基于注册表的缓存,但亚马逊云科技与 ECR 和 BuildKit 的集成提供了一个更本地化、云优化的工作流程。

 

通过将 Docker 的本地缓存能力直接集成到其托管的构建环境中,亚马逊云科技继续简化开发者体验,为云原生团队带来更快、更可靠的构建。对于运行大型容器化负载的组织来说,这种增强代表了朝着更高效、成本效益更高的 CI/CD 管道迈出的重要一步。

 

总体而言,这次更新为寻求提高管道速度和资源效率的开发团队提供了一个实用的杠杆,特别是在容器密集型组织中。通过复用存储在 ECR 中的缓存层,亚马逊云科技 CodeBuild 用户可以缩短周转时间,降低计算成本,并提高构建可靠性。

 

亚马逊云科技并非唯一采用这种加速 Docker 镜像构建的方法,谷歌和微软也提供了类似的服务:

 

谷歌的 Cloud Build支持容器构建和 Buildpacks 的远程缓存镜像。例如,当使用 buildpacks 时,你可以指定一个--cache-image 标志指向一个存储库,如 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/CACHE_IMAGE_NAME:latest,以复用先前的构建结果。此外,Cloud Build 的文档建议使用--cache-from 进行 Docker 构建,以利用存储在注册表中的缓存层。这些功能和亚马逊云科技使用远程注册表作为缓存的概念类似,尽管谷歌强调的是 Buildpacks 和基于注册表的缓存镜像,而不是构建服务本身内置的专用“镜像层缓存”机制。

 

微软的 Azure Pipelines 支持各种构建工件和依赖项的缓存,但就容器层缓存而言,用户社区反馈表明其存在局限性。在自托管代理上,你可以实现 Docker 的--cache-from 策略,并管理你自己的缓存层注册表,但在微软托管的代理上,体验可能脆弱或效率较低。Reddit 上的一位用户观察到:

 

"Azure Pipelines 构建管道支持多阶段 Docker 镜像的缓存功能……下载缓存抵消了我们从缓存中获得的所有好处"

 

简而言之,尽管 Azure 支持在管道中进行缓存任务,但与基于自定义注册表的缓存工作流相比,Docker 层复用的端到端流程还不够成熟。

 

原文链接:AWS Introduces Remote Build Cache in ECR to Accelerate Docker Image Builds

2025-11-21 13:004703

评论

发布
暂无评论

云计算 Fusion Compute虚拟机挂载Tools 并给虚拟机配置静态IP

Python-派大星

10月月更

今年很难被薪资倒挂了!

小小怪下士

Java 程序员

docker 的 bridge,container网络模式

忙着长大#

,docker

直接插入排序算法,看这篇就够了

游坦之

算法 10月月更

MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单(零基础入门MySQL)

Python-派大星

10月月更

算法题学习---链表反转

桑榆

c++ 算法题 10月月更

Eclipse 2022 如何设置中文汉化 步骤绝对足够详细

Geek_yx5md7

eclipse 汉化教程

Linux下安装Anaconda3,这个教程一定要看!

麦洛

Anaconda python 3.5+

定时任务:历史 & 应用

agnostic

定时任务

技术翻译之我见——标准、实操与收益

刘华Kenneth

翻译 图数据库

离职交接,心态要好

程序人生 职场

“程”风破浪的开发者|我的学习方法

张立梵

学习方法 “程”风破浪的开发者

【JavaWeb】 Mybatis-01-Mybatis的简介:用对话的方式让你明白为什么要使用Mybatis

游坦之

10月月更

嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)

矜辰所致

Linux Shell 10月月更 Shell命令

教你如何使用华为云的DLV平台搭建无人机飞行轨迹大屏,教科书级别的文章,非常详细

wljslmz

物联网 无人机 数据可视化 10月月更 智慧大屏

“程”风破浪的开发者|元宇宙就是游戏吗?元宇宙的核心价值是什么?

王中阳Go

学习 深度思考 程序员 元宇宙 “程”风破浪的开发者

同情是对他人的不尊重

欧阳娜

架构作业3-外包学生管理系统架构文档

许四多

HTTP缓存浅析与应用

甜点cc

前端 HTTP 10月月更

VLAN原理和配置,交换机创建vlan的多种方法、三种接口模式的作用和配置方法、Access、Trunk、Hybrid接口的特性以及配置方法和命令

Python-派大星

10月月更

Vmware虚拟机上CentOS8安装教程

DS小龙哥

10月月更

ES6中数组做了哪些新扩展?

CoderBin

JavaScript 面试 前端 ES6 10月月更

复盘:一次测试负责人岗位面试总结

老张

面试 质量保障 团队规划

Vue组件入门(十三)作用域插槽

Augus

Vue 10月月更

Spring Boot「12」自定义 starter

Samson

Java spring 学习笔记 spring-boot 10月月更

嘉宾预告(一) | 安全左中右 · 2022 XDR网络安全运营新理念峰会

未来智安XDR SEC

网络安全

从项目制到产品制,日子变美好了吗?

刘华Kenneth

DevOps 敏捷 软件项目

两类常见场景下的云原生网关迁移实践

阿里巴巴云原生

阿里云 云原生网关

“程”风破浪的开发者|我的Docker学习小妙招

学习方法 “程”风破浪的开发者

Java线程池源码深度解析

JAVA旭阳

Java 线程池 10月月更

Java线程池submit阻塞获取结果实现原理

JAVA旭阳

Java 线程池 10月月更

亚马逊云科技在ECR中引入远程构建缓存以加速Docker镜像构建_云计算_InfoQ精选文章