{ECR}ライフサイクルポリシー

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/LifecyclePolicies.html

ライフサイクルポリシーを作成すると、影響を受けるイメージが 24 時間以内に有効期限切れになります。

 

-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version


-- 1.2 jqインストール
sudo yum -y install jq


-- 1.3 Dockerインストール
sudo yum update -y
sudo amazon-linux-extras install docker
sudo service docker start
sudo usermod -a -G docker ec2-user

別端末を起動


docker info


-- 2. Docker イメージを作成する

vim Dockerfile


FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
 apt-get -y install apache2

# Install apache and write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html

# Configure apache
RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \
 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ 
 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ 
 chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh


docker build -t helloworld:v1 .

sed -i 's/Hello World!/Hello World!!/' Dockerfile
docker build -t helloworld:v2 .


docker images --filter reference=helloworld


 

-- 3. デフォルトレジストリに対して認証する
aws ecr get-login-password --region ap-northeast-1 | \
docker login --username AWS --password-stdin 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com


-- 4. レポジトリを作成する


aws ecr create-repository \
--repository-name test/repo01 \
--image-tag-mutability MUTABLE \
--image-scanning-configuration scanOnPush=false


aws ecr describe-repositories

 

-- 5. イメージを Amazon ECR にプッシュする

docker tag helloworld:v1 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/test/repo01:v1
docker images

docker tag helloworld:v2 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/test/repo01:v2
docker images

aws ecr list-images \
--repository-name test/repo01


docker push 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/test/repo01:v1
docker push 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/test/repo01:v2

aws ecr list-images \
--repository-name test/repo01

 
-- 6. ライフサイクルポリシーの作成

vim policy01.json

{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Keep only one image, expire all others",
            "selection": {
                "tagStatus": "any",
                "countType": "imageCountMoreThan",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}

aws ecr start-lifecycle-policy-preview \
--repository-name test/repo01 \
--lifecycle-policy-text file://policy01.json


aws ecr get-lifecycle-policy-preview \
--repository-name test/repo01

aws ecr list-images \
--repository-name test/repo01

aws ecr put-lifecycle-policy \
--repository-name test/repo01 \
--lifecycle-policy-text file://policy01.json


aws ecr get-lifecycle-policy \
--repository-name test/repo01

aws ecr list-images \
--repository-name test/repo01


今回は、しばらく待つとv1イメージが削除された


-- 7. クリーンアップ

aws ecr delete-repository \
--repository-name test/repo01 \
--force

aws ecr describe-repositories