DamienKarrus’s blog

プログラミングとクライミングの足跡

Amazon ECRでプライベートなレジストリを構築する Docker入門-13

Docker Hubのフリープランだと、プライベートなレジストリは1つしか使えない。そこでAmazon ECRを使用してみる。 Amazon ECRは1年間の無料利用枠で500MBまで無料。

ECRを使うための準備をする。まずはIAMユーザの登録。ECRにアクセスするためにはこのIAMアカウントが必要である。さらに、IAMは12時間有効のパスワードを発行してからアクセスしなければならない。

■IAMユーザの登録

AWSの画面でIAMを検索してIAMのダッシュボードを呼び出し「アクセス管理」の「ユーザー」を選び「ユーザーを追加」をクリック。 ユーザ名を入力し、AWSアクセスの種類をアクセスキー・プログラムによるアクセスにする。 「次のステップ」 「既存のポリシーを直接アタッチ」を選択して「ポリシーのフィルタ」でcontainerregと検索すると AmazonEC2ContainerRegistryPowerUser というポリシーが表示される。のでチェックマークをつけて「次のステップ」 タブは追加せずに 「次のステップ」 確認画面にて 「ユーザーの作成」 ユーザが作成されるとユーザ名・アクセスキーID・シークレットアクセスキーが表示されるので記録しておく。

Amazon ECRでリポジトリを作る

AWSのコンソールからECRを検索して、ECRのコンソール画面を呼び出す(現在はAmazon Container Servicesの中にECRが入っている)。 「使用方法」をクリックするとリポジトリの作成がはじまる。 リポジトリ名を決める「myphp_ecr」として「リポジトリを作成」クリック。 Privateのタグの中に今作成したリポジトリが入っている。URIをメモしておく

12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr

リポジトリ名「myphp_ecr」をクリックするとリポジトリ一覧の画面が出てくる。「プッシュコマンドの表示」をクリックすると、認証トークンの取得からイメージをpushするまでのコマンドの使用例が表示されるので、メモしておく。

トークン取得
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 12345678.dkr.ecr.us-east-1.amazonaws.com
イメージ構築
docker build -t myphp_ecr .
イメージ名の調整(タグ付け)
docker tag myphp_ecr:latest 12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr:latest
イメージをpush
docker push 12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr:latest
■ECRを使うためのローカル環境の整備

必要なawsコマンドをインストールする。unzipが入ってないので最初に入れておく。awsのサイトからzipをダウンロードして、解凍してインストールし、不要ファイルを削除する。手順は次の通り。

$ sudo apt install -y unzip
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version
$ rm -f -r aws awscliv2.zip

ここまで出来たらawsコマンドに認証情報を設定する。 IAMユーザのアクセスキーID・シークレットアクセスキーを入力する。リージョンと出力フォーマットはここでは指定しない。

$ aws configure
AWS Access Key ID [None]: AKIARC-----(snip)-----FTWPS
AWS Secret Access Key [None]: rl3Leo-----(snip)------AyMQ7i
Default region name [None]:
Default output format [None]:

動作確認してみる。pemのようなパスワードが表示されれば正常動作している。

$ aws ecr get-login-password
eyJwYXlsb2FkIjoiK3VOT3hVcXhSY3ZkGR1VWY1KzZCMlJlTGNrUEhaZ...(snip)...
リポジトリにpushする

リポジトリにログインする。awsコマンドでパスワードを取得してlocker loginに渡す。先ほどコピーしたものをペーストして利用する。

$ aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 12345678.dkr.ecr.us-east-1.amazonaws.com

イメージをビルドする

$ docker build -t myphp_ecr .

タグ付けする

$ docker tag myphp_ecr:latest 12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr:latest

pushする

docker push 12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr:latest

Amazon ECRのコンソールで確認するとlatestとして登録されている。

リポジトリからpullする

Amazon ECRにログインする。

$ aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 12345678.dkr.ecr.us-east-1.amazonaws.com

pullするにはpullコマンドの次にAmazon ECRのURIをつける

$ docker pull 12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr:latest

pullできたことを確認して走らせてみる

$ docker image ls
$ docker run -dit --name myphp -p 8080:80 12345678.dkr.ecr.us-east-1.amazonaws.com/myphp_ecr:latest

以上でAmazon ECRを使ったレジストリリポジトリをpush/pullする手順が正常に動作した。

次の記事 damienkarrus.hatenablog.com