あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

Amazon Elastic Container Registry(ECR)を使ってみた

Amazon ECRとは

Dockerコンテナレジストリサービス。自分で作成したコンテナイメージや、AWS Marketplaceで購入したDockerコンテナイメージの保存・管理ができる。

DockerHubのAWS版ですね。(´Д`)ンマー

ECRのコンポーネント

ECRの機能

  • ライフサイクルポリシー:未使用イメージのクリーンアップするルールを定義し、イメージのライフサイクルの管理ができる。
  • イメージスキャン:各リポジトリでプッシュ時にスキャンするように設定でき、コンテナイメージ内のソフトウェア脆弱性の特定に役立つ。
  • クロスリージョンおよびクロスアカウントレプリケーション:別リージョン、別アカウントにイメージをレプリケーションしバックアップすることができる。
  • プルスルーキャッシュルール:リモートレジストリ内のリポジトリのキャッシュを保持できる。




やること

Linuxサーバからdockerコマンドを使用してECRに接続して、プライベートリポジトリを作成しコンテナ操作を行う。
AWS CloudShellで実施したかったのですがサポートしていないようです。。。

重要: 現在、AWS CloudShell コンピューティング環境は Docker コンテナをサポートしていません。

docs.aws.amazon.com

環境

Linuxサーバ(Rocky8.6) ⇒  ECR

実践!

1.プライベートリポジトリ作成
 1-1.ECR-[使用方法]


 1-2.リポジトリを作成が表示されたら下記を入力
  ・一般設定:
   ・可視性設定:プライベート
   ・リポジトリ名:sample-repo
   ・タグのイミュータビリティ:無効
  ・イメージスキャン:
   ・プッシュ時にスキャン:無効
  ・暗号化設定:
   ・KMS暗号化:無効



 1-3.[リポジトリを作成]


2.Linuxサーバ(Rockey8.6)にDockerをインストール
 2-1.下記コマンドを実行

# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo

# dnf --enablerepo=docker-ce-stable -y install docker-ce

# systemctl enable --now docker

# docker version | grep Version
 Version:           24.0.2


 2-2.AWS CLIインストール

# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

# unzip awscliv2.zip

# sudo ./aws/install
You can now run: /usr/local/bin/aws --version


3.ECR接続
 3-1.プッシュコマンド確認
  ECR-[Repositories]-[sample-repo]-[プッシュコマンドの表示]


  [1.認証トークンを取得し、レジストリに対してDocker クライアントを認証します。]のコマンドコピー


 3-2.ECRログイン
  3-1でコピーしたコマンドをLinuxサーバで実行

# aws configure
AWS Access Key ID [None]: xxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]:

# aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/cloudshell-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


4.ECRプッシュ確認
 4-1.サンプルイメージプル

# docker pull nginx
# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    f9c14fe76d50   5 days ago   143MB


 4-2.LinuxサーバからECRへプッシュ

# docker tag nginx:latest xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-repo:latest

# docker image ls
REPOSITORY                                                      TAG       IMAGE ID       CREATED      SIZE
nginx                                                           latest    f9c14fe76d50   5 days ago   143MB
xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-repo   latest    f9c14fe76d50   5 days ago   143MB

# docker push xxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-repo:latest
The push refers to repository [xxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-repo]
4fd834341303: Pushed
5e099cf3f3c8: Pushed
7daac92f43be: Pushed
e60266289ce4: Pushed
4b8862fe7056: Pushed
8cbe4b54fa88: Pushed
latest: digest: sha256:6b06964cdbbc517102ce5e0cef95152f3c6a7ef703e4057cb574539de91f72e6 size: 1571


 4-3.プッシュ確認(GUI
  ECR-[repositories]-[sample-repo]


 4-4.プッシュ確認(CLI

# aws ecr list-images --repository-name sample-repo
{
    "imageIds": [
        {
            "imageDigest": "sha256:6b06964cdbbc517102ce5e0cef95152f3c6a7ef703e4057cb574539de91f72e6",
            "imageTag": "latest"
        }
    ]
}




感想

AWS CloudShellでDockerが使えないと思わなかったのではまった。。。( ;∀;)