タイトルのママ
以下のときにこまった
解決策
タイトルのママ
以下のときにこまった
docker pull ghcr.io/thr3a/imagick
.github/workflows/action.ymlを用意
name: Build and Publish Docker on: push: branches: - master jobs: build_and_push: runs-on: ubuntu-20.04 env: IMAGE_NAME: imagick steps: - name: checkout uses: actions/checkout@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to GitHub Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} - name: Build and push uses: docker/build-push-action@v2 with: context: . push: true tags: | ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:latest ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:1.0.0
vue create --preset kocal/vue-web-extension
vue create --preset kocal/vue-web-extension
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する形。
テスト用に簡単な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できるはず。やったね