ECR
https://gyazo.com/73b3a9723fc15a8bcb0aaf823bf6fe26
概要
コンテナレジストリ
hiroki.icon役割的にはDockerHubだがpublicではないよ→ECR public登場した
一つのレポジトリに対して一つのイメージを保管する
ライフサイクルポリシーを設定して古くなったイメージは自動削除するのが良い
コマンド
レポジトリの一覧
aws ecr describe-repositories
レジストリ作成
aws ecr create-repository --repository-name hiroki-ecr
レジストリ削除
aws ecr delete-repositry --registory-id 103933412310 --repository-name hiroki-ecr --region us-east-2 --profile scala1117_root
必須(registory-id, repository-name)
dockerでecrにログインする
aws ecr get-login-password --profile scala1117 | docker login -u AWS --password-stdin xxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
hiroki.iconユーザ名がAWSじゃないとログイン失敗するぞ
イメージは決まったタグ付けをしなければいけない
hiroki.iconレジストリが一意になるように完全修飾するのです
docker tag hiroki1117/scala 103933412310.dkr.ecr.ap-northeast-1.amazonaws.com/hiroki-ecr:v1
ECRにpush
docker push 103933412310.dkr.ecr.ap-northeast-1.amazonaws.com/hiroki-ecr:v1
docker-credential-helper-ecr
docker loginせずにecrへの操作を行える
リポジトリがECR かどうかを意識する必要なく、docker loginせずにdocker pullやpush が行える
EC2 )適切な権限のインスタンスプロファイル
環境変数AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYを設定
CIなどからECRにpushする必要があるケースなど
code:.gitlab_ci.yml
ecr_push:
stage: deploy
variables:
REGISTORY: xxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
IMAGE_TAG: $REGISTORY/imagename:$CI_COMMIT_REF_NAME
before_script:
- apk add --update curl
# required to run docker-credential-ecr-login
- mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
- >-
curl
-o /usr/local/bin/docker-credential-ecr-login
--create-dirs
- chmod +x /usr/local/bin/docker-credential-ecr-login
- mkdir -p ~/.docker
- echo "{\"credHelpers\":{\"$REGISTORY\":\"ecr-login\"}}" > ~/.docker/config.json
script:
- docker build --pull --tag $IMAGE_TAG .
- docker push $IMAGE_TAG
only:
- tags
s3にdocker-credential-ecr-loginのバイナリを置いておいて毎回それをdlする
hiroki.iconこんなやり方あるのかって感じ
code:.gitlab_ci.yml
image push to ecr:
stage: deploy
variables:
REGISTORY: xxx.dkr.ecr.ap-northeast-1.amazonaws.com
IMAGE_TAG: $REGISTORY/imagename:$CI_COMMIT_REF_NAME
before_script:
- apk add --update go git
- go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login
- mkdir -p ~/.docker
- echo "{\"credHelpers\":{\"$REGISTORY\":\"ecr-login\"}}" > ~/.docker/config.json
script:
- docker build --pull --tag $IMAGE_TAG .
- docker push $IMAGE_TAG
only:
- tags
Github ActionsからECR
code:builds.yaml
name: build
on:
push:
branches:
- "main"
paths:
- "youtube-dl-script/*"
workflow_dispatch:
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: docker/setup-buildx-action@v1
- uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
- uses: docker/login-action@v1
with:
registry: ${{ secrets.ECR_REGISTRY }}
- uses: docker/build-push-action@v2
with:
context: ./youtube-dl-script
push: true
tags: ${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:${{ github.sha }}
参照