最近はM1 Macのおかげで流行ってるのでしょうか?
去年(2020年10月頃)に試してたみたいなんですが、ブログ記事にしていなかったみたいです。 と言うより、当時のArmでの有名どころはRaspberryPIやAWS EC2 A1インスタンスとかで、その後流行るとは思わなかったし必要になることも無いと思って残さなかったのでしょう。 M1 Macが2020/11/11に発表されたことで、大きく世間の流れが変わりましたね……
今はやり方変わってるのかなと思いましたが、試したところ一応下記の方法でできるみたいです。
下記が昔自分が作ったRepositoryとDockerhubに登録したイメージらしい
ここにあるのがすべてです。 github.com
ローカルの環境でbuild/pushするには buildxが必要みたいです
WindowsまたはMacの場合は、Docker Desktopの設定を変更するだけで簡単に使えるようですが、 自分の環境はUbuntu 20.04なLinuxなのでバイナリをインストールする必要があるようです。
$ curl --create-dirs -sL -o ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64 $ chmod +x ~/.docker/cli-plugins/docker-buildx $ echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json $ sudo systemctl restart docker $ docker version -f '{{.Server.Experimental}}'
これでbuildxが利用できるようになります。 次にbuildxでビルドするためのビルド用インスタンスを作成する必要があるみたいです。 下記で作りましょう。
$ docker buildx create --use --name xbuilder $ docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS xbuilder * docker-container xbuilder0 unix:///var/run/docker.sock running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6 default docker default default running linux/amd64, linux/386
「xbuilder」という名前のインスタンスで10個くらいのアーキテクチャに対応したコンテナをビルド出来るようになったぽいです。 実際にローカルにあるDockerfileを「amd64」と「arm64」用にビルドしてdockerhubにpushします。 --pratformで指定するだけなので簡単ですね。
$ docker buildx build --platform linux/amd64,linux/arm64 -t ananoese/dockerx-ex --push .
CircleCIでbuild/pushするための設定
シンプルなDockerイメージのため、特に難しい設定は書かれていませんでした。
buildxのversionが0.4.2なのは、1年前に作ったリポジトリだからですね。。。
version: 2 jobs: buildx: docker: - image: docker:stable environment: DOCKER_BUILDKIT: "1" steps: - run: name: pre install command: | apk add --no-progress git curl - checkout - setup_remote_docker - run: name: install buildx command: | mkdir -vp ~/.docker/cli-plugins/ curl -sL -o ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.4.2/buildx-v0.4.2.linux-amd64 chmod a+x ~/.docker/cli-plugins/docker-buildx - run: name: buildx and Push dockerhub command: | echo ${DOCKER_PASS} | docker login -u ${DOCKER_USER} --password-stdin docker buildx build --platform linux/amd64,linux/arm64 -t ${DOCKER_USER}/dockerx-ex --push . workflows: version: 2 commit-workflow: jobs: - buildx
dockerhubパスワードについては、CircleCIの設定画面を見る限りAccessTokenを利用しているようでした。
おわり
一年前の自分はシェル芸BotのRasberryPi用のイメージを作ろうとして、 少し手をつけたところでビルド方法を大きく変える必要があることに気づき止めた記憶です。
マルチアーキテクチャを意識最初から意識してDockerfileを作ってないと対応が難しそうながするのは気の所為でしょうか…… M1 Mac普及したら、マルチアーキテクチャ対応のイメージが当たり前になるんでしょうか?楽しみですね。
記事に誤りがあるようでしたらご教示いただけると幸いです。