2020年12月にリリースが発表されたAmazon ECRのパブリックレジストリを試したくて、 cawsay
(牛(cow)に喋らせる(say)というジョークコマンド) を実行するだけのDockerファイルをビルドしてイメージを公開してみました。手順を共有してみたいと思います。
以下がリリースされた際の公式のブログ記事です。 aws.amazon.com
モチベーション
コンテナイメージからLambda functionを作れるようになったこともあり、AWSリージョン内からのECRの利用用途が広がっているので、パブリックなDockerイメージにも適用範囲を広げられそうということで試してみました。(参照)
なお、任意のAWSリージョン内からのPullは無料とのことで、ECS, EKSやLambdaなどAWSのプラットフォームから公開されているDockerイメージを使う場合には良さそう。 aws.amazon.com
また、Docker Hubのように6時間の間に100回までしかDocker pullできないなどの利用制限が無いところや、ECSやEKSでプライベートなECRリポジトリを使っている場合DockerイメージをAWSに集約できるのも運用面で嬉しい点です。
前提
- AWSアカウント取得済
- AWS CLIコマンドインストール済
- V1, V2それぞれ以下のバージョンからECRパブリックリポジトリ用のコマンドが使えます
- V2: バージョン 2.1.6
- V1: バージョン1.18.187
- プロファイル設定済
リポジトリを作成
ecr-publicのサブコマンド create-repository
を使って新しいリポジトリ moritamorie-cawsay
を作ります。リージョンに ap-northeast-1
を指定すると失敗したのでus-east-1
に作りました。(2021年3月時点での実行結果)
$ aws ecr-public create-repository --repository-name \ moritamorie-cawsay --region ap-northeast-1 Could not connect to the endpoint URL: "https://api.ecr-public.ap-northeast-1.amazonaws.com/"
$ aws ecr-public create-repository --repository-name \ moritamorie-cawsay --region us-east-1 { "repository": { "repositoryArn": "arn:aws:ecr-public::434137281992:repository/moritamorie-cawsay", "registryId": "434137281992", "repositoryName": "moritamorie-cawsay", "repositoryUri": "public.ecr.aws/w2q8j1y6/moritamorie-cawsay", "createdAt": "2021-03-14T17:07:57.039000+09:00" }, "catalogData": {} }
Dockerfileを作る
Dockerホストの任意のディレクトリ(ここで は cowsay
としました)に、以下のDockerfileを作ってみます。
FROM debian:buster RUN apt-get update && apt-get install -y cowsay
プッシュコマンドを確認
AWS consoleにログインして、Amazon ECRのところから作成したリポジトリを選択すると「プッシュコマンドの表示」というボタンがあるので押して、コマンドを確認しておきます。
プッシュコマンドを実行
表示されたプッシュコマンドを順次実行していきます。
ログイン
AWS CLI で認証トークンを取得し、レジストリに対して Docker クライアントを認証します。
$ aws ecr-public get-login-password --region us-east-1 | \ docker login --username AWS --password-stdin public.ecr.aw
Dockerビルド
Dockerファイルをビルドして、イメージを生成します。
$ docker build -t cawsay .
タグ付け
作成したECRのパブリックリポジトリにイメージをプッシュできるように、イメージにタグをつけます。
$ docker tag moritamorie-cawsay:latest public.ecr.aws/w2q8j1y6/moritamorie-cawsay:latest
プッシュする
新しく作成した AWS リポジトリにこのイメージをプッシュします。
$ docker push public.ecr.aws/w2q8j1y6/moritamorie-cawsay:latest
※プッシュした後に、ログイン状態をそのままにしておく認証情報がなくてハマることがあるようなので、 プッシュ後docker logout
することをお勧めします。(参照)
Docker runでcawsayを実行
公開リポジトリにプッシュしたイメージを使って、cawsay
実行して"Moo"と言わせてみます。
$ docker run -it public.ecr.aws/w2q8j1y6/moritamorie-cawsay:latest \ /usr/games/cowsay "Moo"
非常に有用な?イメージを公開できた気がします。
費用
参考までに、2021年3月時点での費用の一例を載せておきます。
費用はストレージとデータ転送の2つに分かれています。 以下の費用は、米国東部 (バージニア北部)[us-east-1]リージョンにおける費用です。
- ストレージ
- 月間の無料ストレージ
- 50 GB
月間の無料ストレージ以上の利用
- GB/月あたり 0.10USD
データ転送
詳細は公式の以下のページ参照してみてください。料金の例を元に詳細が記載されています。
ECR Publicのコマンド
以下のドキュメントにまとまっています。
Amazon ECR Public Gallery
作成したリポジトリはAmazon ECR Public Galleryから参照可能です。