Amazon ECRとは
Dockerコンテナレジストリサービス。自分で作成したコンテナイメージや、AWS Marketplaceで購入したDockerコンテナイメージの保存・管理ができる。
DockerHubのAWS版ですね。(´Д`)ンマー
ECRのコンポーネント
- レジストリ:各AWSアカウントでパブリックとプライベートのレジストリを1つずつ作成でき、レジストリ内に複数のリポジトリを作成してDockerイメージを保存する。
- 認証トークン:クライアントがイメージをプッシュおよびプルする際の認証を行える。
- リポジトリ:Dockerイメージ、Open Container Initiative(OCI)イメージおよびOCI互換アーティファクトの保存ができる。
- リポジトリポリシー:リポジトリおよびリポジトリ内のイメージへのアクセス権を設定できる。
- イメージ:Dockerイメージ。クライアントはプッシュおよびプルなどの操作ができる。
ECRの機能
- ライフサイクルポリシー:未使用イメージのクリーンアップするルールを定義し、イメージのライフサイクルの管理ができる。
- イメージスキャン:各リポジトリでプッシュ時にスキャンするように設定でき、コンテナイメージ内のソフトウェア脆弱性の特定に役立つ。
- クロスリージョンおよびクロスアカウントレプリケーション:別リージョン、別アカウントにイメージをレプリケーションしバックアップすることができる。
- プルスルーキャッシュルール:リモートレジストリ内のリポジトリのキャッシュを保持できる。
やること
Linuxサーバからdockerコマンドを使用してECRに接続して、プライベートリポジトリを作成しコンテナ操作を行う。
※AWS CloudShellで実施したかったのですがサポートしていないようです。。。
重要: 現在、AWS CloudShell コンピューティング環境は Docker コンテナをサポートしていません。
環境
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
# 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が使えないと思わなかったのではまった。。。( ;∀;)