動かざることバグの如し

近づきたいよ 君の理想に

GitHub Docker Repositoryにpushするとbuildx call failed with: failed to solve: rpc error

タイトルのママ

以下のときにこまった

thr3a.hatenablog.com

解決策

  • GitHubにログインした状態で右上の自分のアイコンをクリック
  • Feature Previewクリック
  • Improved container support」をEnabledにする

f:id:thr3a:20201231222140p:plain

参考リンク

GitHub ActionでGithub Container Registryにpushする

環境

  • 2020-12-31現在

成果物

thr3a/imagemagick-docker

docker pull ghcr.io/thr3a/imagick

YAML

.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

参考リンク

AWS ECRにDockerイメージをPrivateにPushする

ECRって馴染み無いからなんだろうけど、公式サイトが「Amazon ECR レジストリ」って謳ってるのなんかウケる

概要

FargateにデプロイするにあたってAWSにコンテナをPushする必要がでてきたのでメモ

ちょうどタイムリーにPublic Registoryもリリースしてたしね

www.publickey1.jp

ゴールとしては 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できるはず。やったね

参考リンク