LoginSignup
1
0

More than 1 year has passed since last update.

Docker buildx でラズパイ用のDockerイメージをクロスビルドした

Last updated at Posted at 2021-05-05

ことの始まり

僕は役職パネルっていうDiscord BOTを運用しているのだが、開発パートナーがDockerを勉強したいとのことで、Dockerを導入することにした。
しかし、通常のPCのCPUアーキテクチャはamd64で、ラズベリーパイはarm64というものだ。アーキテクチャが違うと、イメージの共有はできない。しかしラズベリーパイでビルドはあまりしたくない。
そこで、「docker buildx」でマルチプラットフォーム向けにビルドできるので使ってみた。

下準備(最初だけでOK)

qemuの準備をする

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

最初とfailed to load LLB: runtime execution on platform linux/arm64 not supported とか error: failed to solve: rpc error: code = Unknown desc = executor failed running [/dev/.buildkit_qemu_emulator /bin/sh -c python -m venv /venv]: exit code: 1 みたいなエラーが出てきたら実行する。

ビルダーインスンタンスを準備する

name引数は適当でもOK

docker buildx create  --name builder --use

ビルド

docker buildx build .

みたいな感じに、いつもビルドするときと同じようにビルドすればOK。
プラットフォームを指定したいときは

docker buildx build --platform=linux/amd64 --load .

みたいな感じにプラットフォームを指定する。(複数指定に関しては後述)

マルチプラットフォーム向けのビルド

プラットフォームを複数指定したい場合は、以下のようにすればよいのだが
これだけだとイメージが保存できずにエラーを吐く!

docker buildx build --platform=linux/amd64,linux/arm64 --load .

じゃあどうするのかというと、DockerHubなどのレジストリにプッシュしてあげれば良い。
プッシュはこんな感じにする

#imagetagは、pushしたいイメージのタグに置き換える。
docker buildx build --platform=linux/amd64,linux/arm64 --push --tag imagetag  .

参考URL

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0