ECRって馴染み無いからなんだろうけど、公式サイトが「Amazon ECR レジストリ」って謳ってるのなんかウケる
概要
FargateにデプロイするにあたってAWSにコンテナをPushする必要がでてきたのでメモ
ちょうどタイムリーにPublic Registoryもリリースしてたしね
ゴールとしては docker push
してAWS ECRにpushできるようにしたい
やり方
まずはAWSのアカウントはあるものとする
まずはAWSのリージョンを決める。今回はap-northeast-1にしておく。あとはレポジトリ名も決めておく。粒度がいまいちわかってないけどコンテナ名1つにつき1レポジトリになるはず。(1レポジトリには異なるタグでしか複数登録できない)
リージョンとレポジトリ名は頻出するので環境変数にセットしておく
export AWS_REGION=ap-northeast-1 export AWS_REPOSITORY_NAME=sample
まずはレポジトリの作成
aws ecr create-repository --repository-name ${AWS_REPOSITORY_NAME} --region ${AWS_REGION}
作成したレポジトリを見てみる
aws ecr describe-repositories --region ${AWS_REGION}
以下のように表示されれば正常に作成されている
{ "repositories": [ { "repositoryArn": "arn:aws:ecr:ap-northeast-1:173603934556:repository/sample", "registryId": "xxxxxxxxxxxxxxxx", "repositoryName": "sample", "repositoryUri": "xxxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample", "createdAt": "2020-12-29T23:37:55+09:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false }, "encryptionConfiguration": { "encryptionType": "AES256" } } ] }
結果の registryId ってのが今後使うので、こいつも環境変数にセットしておく
export AWS_REGISTRY_ID=xxxxxxxxxxx
次にdocker pushできるようにdockerコマンドにAWSのログイン情報を紐付ける。
aws ecr get-login-password --region | docker login --username AWS --password-stdin ${AWS_REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
aws ecr get-login-password --region
でログイン用のハッシュ?が生成されるのでそれを標準入力でdocker loginする形。
実際にpushしてみる
テスト用に簡単なDockerfileを用意する
FROM alpine CMD ["echo", "nyaa"]
でECRにpushできるようにタグを付けてビルド
docker build -t ${REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPOSITORY_NAME}:latest .
念の為動作確認
docker run --rm ${REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPOSITORY_NAME}
いざpush
docker push ${AWS_REGISTRY_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPOSITORY_NAME}
イメージの確認
aws ecr list-images --repository-name ${AWS_REPOSITORY_NAME} --region ${AWS_REGION}
うまくいけばこれでpushできるはず。やったね