クロスプラットフォーム開発のTips
arm用Dockerコンテナの起動
code:bash
docker run --privileged --rm tonistiigi/binfmt --install all
docker run --rm -it --platform linux/arm64 ubuntu:24.04 bash
.imgファイルのDockerコンテナ化
code:bash
sudo losetup -Pf --show raspi_backup.img
sudo mkdir -p /mnt/rpi-root
sudo mount /dev/loop0p2 /mnt/rpi-root
cd /mnt/rpi-root/
sudo tar --numeric-owner -cpf /tmp/rpi-rootfs.tar \
--exclude='./proc' --exclude='./sys' --exclude='./dev/pts' \
--exclude='./run' --exclude='./tmp' .
# タグを付けてインポート
sudo docker import /tmp/rpi-rootfs.tar rpi-rootfs:latest
# binfmt登録(arm, arm64など)
sudo docker run --privileged --rm tonistiigi/binfmt --install arm,arm64
# 例:32bit系(armhf)の場合
sudo docker run --rm -it rpi-rootfs:latest /bin/bash
ただし、上記の方法ではdocker imageのメタデータやプラットフォーム情報(CPUアーキテクチャ)の情報が正しく設定されないケースがある。そのような場合は、Dockerfileで.tarからイメージを作る手順を記述する。
code:Dockerfile
FROM scratch
ADD xxx.tar /
# 文字コード・ロケールなど必要に応じて整備
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
CMD "/bin/sh"