GitHub Actions を使用してマルチアーキテクチャイメージを構築する方法を見てきた 前回の記事 に続いて、別の CI を使用して同じことを行う方法を示します。 この記事では、このユースケースで使用するのが最も難しいものの1つであるTravisについて検討します。
Travis を使用してイメージの構築を開始するには、まずリポジトリのルートにファイルを作成する必要があります .travis.yml
。
language: bash
dist: bionic
services:
- docker
script:
- docker version
「バイオニック」を使用して、最新バージョンのUbuntuを利用できるように指定したことに気付くかもしれません– Ubuntu 18.04(バイオニックビーバー)。 今日 (2020 年 5 月) の時点で、このスクリプトを実行すると、提供されている Docker エンジンのバージョンが 18.06.0-ce であることがわかります これは古すぎてbuildxを使用できません。 したがって、Dockerを手動でインストールする必要があります。
language: bash
dist: bionic
before_install:
- sudo rm -rf /var/lib/apt/lists/*
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) edge"
- sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
script:
- docker version
前のスクリプトでわかるように、インストールプロセスでは、パッケージデータベースを同期し、Docker APTリポジトリから新しいパッケージをダウンロードできるようにするために、新しいキーを追加する必要があります。 その後、Ubuntu18.04で利用可能な最新バージョンのDockerをインストールできます。 これを実行すると、Dockerエンジンのバージョン19.03があることがわかります。
この時点で、Docker CLI と対話することはできますが、buildx プラグインはまだインストールされていません。 インストールするには、GitHubからダウンロードします。
language: bash
dist: bionic
before_install:
- sudo rm -rf /var/lib/apt/lists/*
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) edge"
- sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- mkdir -vp ~/.docker/cli-plugins/
- curl --silent -L "https://github.com/docker/buildx/releases/download/v0.3.0/buildx-v0.3.0.linux-amd64" > ~/.docker/cli-plugins/docker-buildx
- chmod a+x ~/.docker/cli-plugins/docker-buildx
script:
- docker buildx version
これで buildx を使用できるようになりました。 これは冗長であり、Travis の動作と基になっているバージョンのために、 CircleCI のように Docker イメージを使用して短縮することはできません。 この大きな定型文をスクリプトの先頭に置き、ビルドを実行するたびに約1.5分のビルドを要できるようにする必要があります。
次に、複数のアーキテクチャのイメージを構築します。 前の記事で使用したのと同じ Dockerfile と同じビルド コマンドを使用します。
FROM debian:buster-slim
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl" ]
Travis 構成ファイルを変更して、「スクリプト」セクションに次のようにします。
script:
- docker buildx build --platform linux/arm/v7,linux/arm64/v8,linux/amd64 --tag your-username/multiarch-example:buildx-latest .
このように起動すると、次のエラーが表示されます。
multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")
これは、ビルドキットドライバがまだ起動されていないためです。 したがって、その行を設定ファイルに追加して再度実行すると、buildxはビルドキットのインスタンスを実行してマルチアーキテクチャイメージをビルドできるようになります。
Travis ダッシュボードに移動すると、次の結果が表示されます。
最後の手順では、イメージを Docker ハブに保存します。 これを行うには、書き込みアクセスを取得するために Docker Hubからのアクセストークン が必要になります。
アクセス トークンを作成したら、[設定] セクションのプロジェクト設定に追加する必要があります。
その後、後でログインするための変数を作成できますDOCKER_USERNAME
DOCKER_PASSWORD
。
これが完了したら、次のようにログインステップとオプションを --push
buildxコマンドに追加できます。
script:
- docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
- docker buildx create --use
- docker buildx build --push --platform
linux/arm/v7,linux/arm64/v8,linux/amd64 --tag
your-username/multiarch-example:buildx-latest .
そして出来上がり、コードベースに変更を加えるたびにマルチアーチイメージを作成できるようになりました。