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