CodeBuildでECRにPushするときにMulti stageなDockerイメージでキャッシュを効かせる
ベース
以下の記事のような形でCodeBuildを設定している状態
AWS CodeBuildを使ってDockerイメージをビルドし、Amazon EC2 Container Registry(ECR)へpushする | DevelopersIO
https://dev.classmethod.jp/tool/docker/20170225-codebuild-docker/
デフォルトだとキャッシュが効かないのでビルドに時間がかかるのでキャッシュを使うように設定する
解決
Dockerfile内で builder
というstageがあるとする
buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
docker: 18
pre_build:
commands:
## Login ECR
- $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
## Dockerイメージのタグとして使用するため、Gitのコミットハッシュを取得
- IMAGE_TAG=$CODEBUILD_RESOLVED_SOURCE_VERSION
build:
commands:
## Pullしておく
- docker pull $IMAGE_REPOSITORY_NAME:builder
- docker pull $IMAGE_REPOSITORY_NAME:latest
## builder stage用
- >-
docker build --target builder
--cache-from $IMAGE_REPOSITORY_NAME:builder
-t $IMAGE_REPOSITORY_NAME:builder .
## Dockerイメージのビルド
- >-
docker build
--cache-from $IMAGE_REPOSITORY_NAME:builder
--cache-from $IMAGE_REPOSITORY_NAME:latest
-t $IMAGE_REPOSITORY_NAME:$IMAGE_TAG
-t $IMAGE_REPOSITORY_NAME:latest .
## DockerイメージのECRへのプッシュ
- docker push $IMAGE_REPOSITORY_NAME:$IMAGE_TAG
- docker push $IMAGE_REPOSITORY_NAME:latest
- docker push $IMAGE_REPOSITORY_NAME:builder
## ECS+CodeDeployにどのイメージを使用するか指示するためのファイルを作成
- printf '{"Version":"1.0","ImageURI":"%s"}' $IMAGE_REPOSITORY_NAME:$IMAGE_TAG > imageDetail.json
artifacts:
## buildの最後で作成したファイルをアーティファクトとして流す
files: imageDetail.json
(シンタックスハイライトが>-に対応していない...)
- docker buildする際に
--target
を指定して特定のstage用にビルド -
--cache-from
をbuilderステージにも最終stageにもつける
runtime-versions
はstandard:2.0ランタイム用の設定
参考: CodeBuildでStandard2.0のイメージを使用したらエラー出たときの対処
Author And Source
この問題について(CodeBuildでECRにPushするときにMulti stageなDockerイメージでキャッシュを効かせる), 我々は、より多くの情報をここで見つけました https://qiita.com/maruware/items/89436b1d8d6710c38ed4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .