■ はじめに
CodeBuild で、カスタム Docker ビルドイメージを 使用する必要ができたのだが、 その際に、Amazon ECR が必要らしいので、勉強する。 なお、Amazon EMRではない。 (似通ったサービス名が、増えてややっこしいんだよなー)
https://dk521123.hatenablog.com/entry/2020/02/20/230519
追記:CodeBuild でカスタムイメージを使う
以下の関連記事を参照のこと
CodeBuild で カスタムDockerイメージを使ってビルドする
https://dk521123.hatenablog.com/entry/2020/05/23/080655
目次
【1】Amazon ECR (Elastic Container Registry) 1)公式サイト 2)料金 【2】使い方 1)リポジトリ作成 (初回のみ) 2)環境構築を行う 3)Dockerファイルを作成する 4)ECRにDockerイメージを登録する
【1】Amazon ECR (Elastic Container Registry)
* Dockerコンテナイメージを保存しておくためのレジストリサービス (AWS版Docker Hub的な?)
1)公式サイト
ユーザズガイドは以下。
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/ecr-ug.pdf
2)料金
無料枠もあるので、Docker Hubと比べてもお安い
公式サイト:料金
https://aws.amazon.com/jp/ecr/pricing/
比較対象:Docker Hubの料金
https://hub.docker.com/pricing
【2】使い方
1)リポジトリ作成 (初回のみ) 2)環境構築を行う 3)Dockerファイルを作成する 4)ECRにDockerイメージを登録する
1)リポジトリ作成
AWS-CLIでもできるらしいが、今回は、 AWSマネージメントコンソールから作成 ⇒ ちなみに「ECR」って検索すると、 候補の一番上は「Secrets Manager」がくる。 「Elastic Container Registry」を選ぶ。 ⇒ 今回は、リポジトリ名を「hello-world-ecr」とする
2)環境構築を行う
EC2(今回は、Amazon Linux2) を立ち上げて以下を行う [2-1] EC2 の RoleにECRを実行できる権限を付与 [2-2] aws-cli を最新にする(※1) [2-3] docker のインストール [2-4] docker を sudo なしで実行できるように設定する ※1 デフォルトEC2だと「aws ecr get-login-password」がなかったので
[2-1] EC2 の Role にECRを実行できる権限を付与
今回は、「AmazonEC2ContainerRegistryFullAccess」を付与。 権限付与を行わないと、以下のサイトのように ECRのGetAuthorizationToken操作権限がないっと怒られる。
https://blogenist.jp/2018/03/22/3048/
# 古いとコマンドが対応していなくてエラーになったので。 # aws-cli 1.16.300, Python2.7.16 => aws-cli 1.18.65, Python3.7.6 sudo yum install python3 -y sudo pip3 install awscli --upgrade /usr/local/bin/aws --version
https://dev.classmethod.jp/articles/latest-version-awscli-al2/
[2-3] docker のインストール
sudo yum install -y docker sudo service docker start sudo service docker status
[2-4] docker を sudo なしで実行できるように設定する
https://qiita.com/DQNEO/items/da5df074c48b012152ee
# 自分のユーザを調べる(今回は「ssm-user」) whoami sudo gpasswd -a ssm-user docker sudo service docker restart exit # 再度、入りなおす(これ、必要!)
3)Dockerファイルを作成する
vi Dockerfile
# 修正内容は以下の通り。
Dockerfile
# 今回は、CentOS7/Python3.6を入れる FROM centos:centos7 # Install dependencies RUN yum -y update RUN yum -y install \ git \ zlib \ tk-devel \ tcl-devel \ ncurses-devel \ gdbm-devel \ db4-devel \ readline-devel \ zlib-devel \ bzip2-devel \ sqlite-devel \ openssl-devel \ libXext.x86_64 \ libSM.x86_64 \ libXrender.x86_64 \ gcc \ gcc-c++ \ libffi-devel \ python-devel \ patch \ bzip2 \ jq \ make ENV ROOT_PATH /root ENV PY_VERSION 3.6.10 # Download Python3.6.10 WORKDIR $ROOT_PATH RUN curl -O https://www.python.org/ftp/python/$PY_VERSION/Python-$PY_VERSION.tgz RUN tar xzvf Python-$PY_VERSION.tgz # Install Python3.6.10 WORKDIR $ROOT_PATH/Python-$PY_VERSION RUN ./configure --with-threads RUN make install # Install pip WORKDIR $ROOT_PATH RUN curl -O https://bootstrap.pypa.io/get-pip.py RUN python get-pip.py WORKDIR /root CMD ["/bin/bash"]
4)ECRにDockerイメージを登録する
結構、他のサイトだとごちゃごちゃ書いているが、 非常に簡単にできた。
[4-1] AWSマネージメントコンソールからpush commandsを参照する
[1] AWSマネージメントコンソール「Elastic Container Registry」で 作成したリポジトリを選択。 [2] 右側にある「View push commands」ボタンを押下。 [3] 使用しているOSのタブを選択 (今回はEC2「Amazon Linux」なので「maxIS / Linux」) ⇒ ECRにDockerイメージを登録するまでの 手順(4Step)・コマンドがのっているので、 その通りに行うだけ。
[4-2] ECRにログインする
# AWSマネージメントコンソールの手順 1(Retrieve an authentication taken...) # のコマンドをコピーして、DockerファイルのあるOS上で実行 # docker login [オプション] [サーバ] # (--username:ユーザ名、--password-stdin:標準出力からパスワードを設定) /usr/local/bin/aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin xxxx.xxx.ecr.us-west-2.amazonaws.com
[4-3] 作成したDockerfileをビルドする
# AWSマネージメントコンソールの手順 2(Build your Docker image...) # のコマンドをコピーして、DockerファイルのあるOS上で実行 # 新しいイメージを作成する # docker build -t [【1】で作成したリポジトリ名] docker build -t hello-world-ecr
[4-4] タグづけする
# AWSマネージメントコンソールの手順 3(After the build completes,...) # のコマンドをコピーして、DockerファイルのあるOS上で実行 # docker tag [イメージID] [リポジトリ名]:[タグ] docker tag hello-world-ecr:latest xxxx.xxx.ecr.us-west-2.amazonaws.com/hello-world-ecr:latest
[4-5] ECRにプッシュする
# AWSマネージメントコンソールの手順 4(Run the following command...) # のコマンドをコピーして、DockerファイルのあるOS上で実行 # docker push [コンテナ名] docker push xxxx.xxx.ecr.us-west-2.amazonaws.com/hello-world-ecr:latest
[4-6] 動作確認
AWSマネージメントコンソール「Elastic Container Registry」を再読み込みし、 対象のリポジトリ名の配下に作成したイメージがあればOK!
参考文献
https://qiita.com/3utama/items/b19e2239edb6996a735f
http://blog.serverworks.co.jp/tech/2020/01/23/ecr/
https://yenjoji.github.io/pages/2016/07/26/20160725-ecr-101/
https://blog.websandbag.com/entry/2019/06/04/231201
https://qiita.com/aokad/items/17a06c2384041bd60d16
Dockerイメージの登録
https://qiita.com/Esfahan/items/2ddc8d481afd012da357
https://qiita.com/KJN/items/ad4aeb01c39bb5909de4
https://dev.classmethod.jp/articles/push-docker-image-to-ecr-with-cli/
関連記事
Amazon ECR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/26/142645
Terraform ~ AWS ECR ~
https://dk521123.hatenablog.com/entry/2023/05/23/002314
Amazon ECR でのトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/05/24/000000
CodeBuild で カスタムDockerイメージを使ってビルドする
https://dk521123.hatenablog.com/entry/2020/05/23/080655
Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030
Docker ~ 基本編 / Dockerfile ~
https://dk521123.hatenablog.com/entry/2020/04/14/000000
Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000
Docker ~ 基本編 / レポジトリに関するコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/21/000000
AWS CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812