Amazon ECR が GA でおめでたいのでさわってみた
AWS のマネージド Docker Registry である Amazon EC2 Container Registry (ECR) が GA ですね! (SA 岩永さんによる日本語訳はこちら)
先日の re:Invent で発表されて以来まだかまだかと待ち続けていましたが、ついに一般公開となりました.
早速触ってみたので感想とかもろもろ.
ちなみに動かした環境は
- OS X El Capitan Version 10.11.2 (15C50)
- Docker Machine 0.5.1 (7e8e38e)
- Docker 1.9.1 (a34a1d5)
- VirtualBox 5.0.10 r104061
です.
まずはマネージドコンソールから
Amazon ECR は Amazon ECS のコンソールのメニューに追加されてました.
残念ながら現時点では us-east-1 (North Virginia) のみの公開のようです.
Get Started
から新しい Repository を作成します.
ここでは my-new-ecr-repos/test-image
という名前を入力しました.
エンドポイントは
https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/{YOUR_REPOSITORY_NAME}
という感じで設定されるようです.
Repository 名の /
は必須ではありませんが、今まで docker/distribution を自前で運用していたため、慣れた名前空間を利用したくて /
ありにしました.
ここで作成する Repository が docker コマンドでの push/pull の対象になります.
今回の例で言うと、
$ docker push https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest
$ docker pull https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest
となります.
Repository 名を入力したら、ひと思いに Next Step
ボタンを押下しましょう.
早速使って見る
上記の流れで Repository を作成すると
のようなチュートリアル的なコマンドリストが表示されます.
早速動かそうとしてみましたが僕が使っている Homebrew で入る aws-cli は 1.9.14 のため、まだ ecr サブコマンドが含まれている 1.9.15 は利用できないようです.
ので、僕自身はソースからビルドして動かしてみました.
pip で aws-cli を直接インストールしている方は多分更新すれば最新になるのかなと思うので、この後のビルドのくだりは飛ばしちゃってください.
aws-cli をソースからビルド
GitHub から最新ソースを持ってきてビルドしましょう.
$ which pip
でパスが返ってくる場合はそのまま次に進みます. 返ってこない場合は $ brew install python
とかで pip ごとまるっと入れちゃうのが楽でしょう.
ソースをクローン
$ git clone git@github.com:aws/aws-cli.git
ビルド
$ cd aws-cli
$ pip install -r requirements.txt
- 省略 -
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pygments-2.0.2 Sphinx-1.1.3 botocore colorama-0.3.3 docutils-0.12 jmespath mock-1.0.1 nose-1.3.0 py-1.4.31 pyasn1-0.1.9 python-dateutil-2.4.2 rsa-3.1.4 six-1.10.0 tox-1.4 virtualenv-13.1.2 wheel-0.24.0
$ pip install -e .
- 省略 -
Installing collected packages: awscli
Running setup.py develop for awscli
Successfully installed awscli
動かしてみる
バイナリはビルドを実行したディレクトリの bin
以下に出力されています.
$ ./bin/aws --version
aws-cli/1.9.15 Python/2.7.11 Darwin/15.2.0 botocore/1.3.15
aws-cli のバージョンが 1.9.15
と表示されることを確認してください.
$ ./bin/aws ecr help
ecr サブコマンドのヘルプが表示されれば準備 OK です.
マネージドコンソールで表示されたコマンドを動かす
まずは EC2 Container Registry にログイン
$ ./bin/aws ecr get-login --region us-east-1 --profile {YOUR_PROFILE_NAME}
このコマンドを実行すると、docker login ...
から始まるながーいコマンドが出力されます.
ここから先は docker コマンドが使えることが前提になります. ローカルで動かしたことがない場合は Docker Toolbox をインストールしましょう.
先ほどのながーいコマンドをまるっとコピーして実行しましょう.
$ docker login -u AWS -p {SO_LONG_CREDENTIAL_HERE} -e none https://{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com
うまいことログインできると、
WARNING: login credentials saved in {YOUR_HOME_DIRECTORY}/.docker/config.json
Login Succeeded
のような表示が出ます. 過去に docker login コマンドで Docker Hub などにログインしていると出ないかもしれません.
ECR に push するイメージを用意する
上に貼ったキャプチャの画面ではチュートリアル用の Dockerfile からイメージをビルドしてプッシュしているようですが、めんどくさいので有りものを利用します.
Docker 界最軽量の呼び声高い、busybox
を pull してきます.
$ docker pull busybox:latest
busybox に先ほど作成した Repository の名前をつけます.
$ docker tag busybox:latest {AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest
プッシュ!
$ docker push {AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image:latest
The push refers to a repository \[{AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-new-ecr-repos/test-image\] (len: 1)
ac6a7980c6c2: Pushed
c00ef186408b: Pushed
latest: digest: sha256:7b64eacbb0ce4f24fac45fddc2a542ff87288f8ec9295a59377328348bbf0e2b size: 2735
マネージドコンソールで確認してみる
Amazon ECR に戻ると、
Repository の中を覗いてみると、
という感じでちゃんと作成されてました.
これだけじゃない Amazon ECR
個人的に一番テンションが上がったのが、Permission の設定部分です.
まずはご覧ください.
1 つのアカウント内に作成された Amazon ECR を Account Number を指定して付与したい権限を選ぶだけで複数の AWS アカウントから利用できるってことだと思います. (まだ試してませんが)
僕の所属しているチームでは複数プロジェクトで共通のイメージを使うことがよくあるので、ありがたい限りです.
まとめ
まだまださわり始めですが、今のところかなりいい感じに見えます.
はやく東京リージョンに来てくれることを祈ってます.