TechSummary 2025-10-03
· 閱讀時間約 6 分鐘
🚀 縮短 AWS CodeBuild 上的 Docker 影像建置時間:使用 Amazon ECR 作為遠端快取
- 問題與解決方案: Docker 影像建置可能耗時且重複,而 AWS CodeBuild 內建的本機快取僅為暫時性且不可靠。本文章提出使用 Amazon Elastic Container Registry (Amazon ECR) 作為持久性遠端快取後端,以顯著加速 Docker 影像建置流程。
- 優勢: ECR 提供可靠、長期儲存的快取解決方案,可在不同建置作業中重複使用,且隨時有效,可將影像建置時間減少高達 25%。
- 實作流程:
- 啟用 Docker 驅動程式中的
containerd影像儲存,透過docker buildx命令建立一個新的docker-container驅動程式。 - 首次執行時,CodeBuild 會從頭建置 Docker 影像,並將新建置的影像及其 相關快取匯出到 Amazon ECR。
- 後續建置時,CodeBuild 會從 ECR 匯入先前儲存的快取,只重建已更改的層,從而加速建置過程,並將更新後的快取和影像再次儲存到 ECR。
- 啟用 Docker 驅動程式中的
- 關鍵 CodeBuild
buildspec.yaml片段:install:
commands:
- docker buildx create --name containerd --driver=docker-container --driver-opt default-load=true
pre_build:
commands:
- aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin ${AWS::AccountId}.dkr.ecr.$AWS_REGION.amazonaws.com
build:
commands:
- cd ./al-lambda/x86_64/dotnet8/
- docker build --cache-to type=registry,ref=${ECRRepository.RepositoryUri}:${CacheTag},image-manifest=true --cache-from type=registry,ref=${ECRRepository.RepositoryUri}:${CacheTag} --tag ${ECRRepository.RepositoryUri}:${ImageTag} --builder=containerd .
post_build:
commands:
- docker push ${ECRRepository.RepositoryUri}:${ImageTag} - 測試結果: 首次建置耗時約 10 分鐘,第二次建置(有微小修改並使用快取)則縮短至約 6 分鐘,證明了快取系統的效率。