マルチアーキテクチャ ビルド、CircleCI はどうですか?

GitHub Actions を使用してマルチアーキテクチャイメージを構築する方法を見てきた 前回の記事 に続いて、別の CI を使用して同じことを行う方法を示します。 この記事では、最も使用されている CI SaaS の 1 つである CircleCI について考察します。

CircleCI でイメージの構築を開始するには、まずファイルを作成する必要があります .circleci/config.yml

version: 2
jobs:
  build:
    docker:
      - image: docker:stable
    steps:
      - checkout
      - setup_remote_docker:
          version: 18.09.3
      - run: docker version

buildx にはバージョン 18.09 以降が必要ですが、CircleCI では 18.09.3 以降のバージョンが提供されていないため、Docker エンジンのバージョン 18.09.3 を使用して指定しています。

この時点で、Docker CLI と対話することはできますが、buildx プラグインはまだインストールされていません。 インストールするには、GitHubからビルドをダウンロードします。

version: 2
jobs:
  build:
    docker:
      - image: docker:stable
    steps:
      - checkout
      - setup_remote_docker:
          version: 18.09.3
      - run: apk add make curl
      - run: mkdir -vp ~/.docker/cli-plugins/
      - run: curl --silent -L --output ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.3.1/buildx-v0.3.1.linux-amd64
      - run: chmod a+x ~/.docker/cli-plugins/docker-buildx
      - run: docker buildx version

これで buildx を使用できるようになりました。 非常に冗長なので、何かをビルドするたびにbuildxを再インストールする代わりに、buildxがすでにインストールされている別の オリジンイメージ を使用できます。

version: 2
jobs:
build:
  docker:
    - image: jdrouet/docker-with-buildx:stable
  steps:
    - checkout
    - setup_remote_docker:
        version: 18.09.3
    - run: docker buildx version

次に、複数のアーキテクチャ用に構築します。 前の記事で使用したのと同じ Dockerfile と同じビルド コマンドを使用します。

FROM debian:buster-slim
RUN apt-get update \
  && apt-get install -y curl \
  && rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl" ]

次に、CircleCI 構成ファイルを次のように変更します。

version: 2
jobs:
build:
  docker:
    - image: jdrouet/docker-with-buildx:stable
  steps:
    - checkout
    - setup_remote_docker:
        version: 18.09.3
    - run: |
        docker buildx build \
          --platform linux/arm/v7,linux/arm64/v8,linux/amd64 \
          --tag your-username/multiarch-example:buildx-latest .

CircleCI ビルドダッシュボードに移動すると、次の結果が表示されます。

アーチビルドサークル1

最後の手順では、イメージを Docker ハブに保存します。 これを行うには、書き込みアクセスを取得するために Docker Hubからのアクセストークン が必要になります。

アーチビルドサークル2

作成したら、[ シークレット ] セクションのリポジトリ設定で設定する必要があります。 後でログインするための変数を作成しますDOCKER_USERNAMEDOCKER_PASSWORD

アーチビルドサークル3

これが完了したら、次のようにログインステップとを --push buildxコマンドに追加できます。

version: 2
jobs:
build:
  docker:
    - image: jdrouet/docker-with-buildx:stable
  steps:
    - checkout
    - setup_remote_docker:
        version: 18.09.3
    - run: docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
    - run: |
        docker buildx build --push \
          --platform linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/i386,linux/amd64
          --tag your-username/multiarch-example:buildx-latest .

そして出来上がり、コードベースに変更を加えるたびにマルチアーチイメージを作成できるようになりました!