ようこそ!この記事では、ローカルで作成した Docker イメージを Amazon Elastic Container Registry (ECR) にプッシュする手順を、細かすぎるぐらい詳細に解説します。
「Docker と ECR の連携って、まるで一見すると複雑なパズルみたいじゃない?」と感じるあなたも、この記事を読めばきっとこう叫ぶでしょう:
「おお、これは簡単すぎる!なんで最初からやらなかったんだろう!」
必要な前提条件 ~準備がすべて~
準備なしに行動するのは、冒険に出るのに地図を持たないようなもの。以下の準備を確実に行いましょう。
1. AWS CLI のインストールと設定
AWS CLI をインストールしていない?それはパスタを作るのに鍋を持っていないようなものです。こちらの公式ドキュメントを参考にインストールを完了してください。
2. Docker のインストール
Docker はこの作業の基盤となるツールです。もし未インストールなら、Docker の公式サイトへ行きましょう。インストール後、docker --version
で確認してみてください。「Docker, ready for action!」と聞こえる気がするはず。
3. AWS SSO (Single Sign-On) の設定
AWS SSO プロファイルが正しく設定されている必要があります。まだ設定していない場合は、AWS SSO の公式ガイドをご確認ください。
4. Amazon ECR リポジトリ
プッシュ先となるリポジトリが存在していない場合、以下のコマンドで作成します:
aws ecr create-repository --repository-name <リポジトリ名> --region <リージョン>
「リポジトリがない状態でプッシュする」のは「貯金箱がないのにお金を貯めようとする」ぐらい無意味です。
手順概要 ~スムーズな作業の流れ~
- AWS SSO を使って AWS にログイン
- Docker の認証を Amazon ECR に設定
- ローカルの Docker イメージに適切なタグを付与
- Amazon ECR に Docker イメージをプッシュ
手順詳細 ~初心者からプロフェッショナルまで~
ステップ 1: AWS SSO でログイン
AWS CLI を使用して AWS SSO にログインします。
aws sso login --profile <プロファイル名>
実行例:
aws sso login --profile sotaheavymetal21
結果:
ブラウザが自動的に開き、AWS SSO ログインページが表示されます。コードを入力して認証を完了すると以下が表示されます。
Successfully logged into Start URL: https://d-xxxxxxxx.awsapps.com/start#/
これで第一ステップが完了!ゲームのスタートボタンを押した気分ですね。
ステップ 2: Docker の認証情報を設定
Docker が Amazon ECR にアクセスできるように認証トークンを設定します。
aws ecr get-login-password --region <リージョン> --profile <プロファイル名> | docker login --username AWS --password-stdin <アカウント番号>.dkr.ecr.<リージョン>.amazonaws.com
実行例:
aws ecr get-login-password --region ap-northeast-1 --profile sotaheavymetal21 | docker login --username AWS --password-stdin 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com
結果:
Login Succeeded
「ログイン成功」の文字を見た瞬間の安心感…あなたも感じましたか?
ステップ 3: Docker イメージにタグを付与
Amazon ECR リポジトリ向けにローカルイメージにタグを付与します。
docker tag <ローカルイメージ名>:<タグ> <ECRリポジトリURI>:<タグ>
実行例:
- Django:
docker tag sota-app:latest 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/sotaheavymetal21/django:latest
- Nginx:
docker tag sota-nginx:latest 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/sotaheavymetal21/nginx:latest
タグ付けの作業は「名前札を付ける」感覚。これがなければ ECR はどのイメージをどこに保存するのか混乱してしまいます。
ステップ 4: Amazon ECR にイメージをプッシュ
タグ付けしたイメージを Amazon ECR にプッシュします。
docker push <ECRリポジトリURI>:<タグ>
実行例:
- Django:
docker push 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/sotaheavymetal21/django:latest
- Nginx:
docker push 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/sotaheavymetal21/nginx:latest
成功時の出力例:
The push refers to repository [000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/sotaheavymetal21/django]
latest: digest: sha256:<HASH> size: <SIZE>
これで完了!あなたのイメージは無事にクラウド上に旅立ちました。
トラブルシューティング
1. セッションが切れてしまった場合
エラー例:
The security token included in the request is invalid.
解決策: 再度以下を実行してください。
aws sso login --profile <プロファイル名>
2. リポジトリが存在しない場合
エラー例:
repository not found
解決策: リポジトリを作成します。
aws ecr create-repository --repository-name <リポジトリ名> --region <リージョン>
3. ネットワークの問題
エラー例:
CannotPullContainerError
解決策:
NAT ゲートウェイや VPC 設定を確認し、外部接続ができることを確保します。
結論
これで、ローカル Docker イメージを Amazon ECR にプッシュする方法が完璧にマスターできました。
「AWS は難しい…」と思っていた日々も、今日からおさらばです。次はデプロイ!どんどん学んでいきましょう。