Raspberry Piでlinux/amd64のDockerコンテナーを動かす

Dockerではマルチプラットフォームとしてエミュレーションの機能を使いながら別のアーキテクチャーのDockerコンテナーを動かすことができるようになっています。

この状況については、Docker公式ドキュメントのMulti-platform imagesで説明されていますが、「Docker Desktopではbinfmt_miscマルチアーキテクチャー対応により、arm、mips、ppc64le、s390xなどのコンテナーを実行できます」とされています。

MacにインストールしているDocker for Desktopで様子を見てみると、次のようにさまざまなアーキテクチャーに対応している様子が表示されます。

$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running 20.10.20 linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
desktop-linux docker
desktop-linux desktop-linux running 20.10.20 linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

同様にして、Raspberry Pi 4にインストールしたDockerで様子をみると次のようになっています。

$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running 20.10.21 linux/arm64, linux/arm/v7, linux/arm/v6

この状態では、armの32-bitと64-bitにしか対応していません。

そこで、QEMUのパッケージを追加インストールします。

$ sudo apt install -y qemu-user-static

インストール後に、もう一度様子を見てみます。

$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running 20.10.21 linux/arm64, linux/arm/v7, linux/arm/v6, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386

今度は、linux/amd64を始めとして幾つかのアーキテクチャーが追加されました。

実行してみましょう。最初は、そのまま実行してみます。

$ docker run --rm ubuntu uname -a
Linux 2e0ec90c1e66 5.15.61-v8+ #1579 SMP PREEMPT Fri Aug 26 11:16:44 BST 2022 aarch64 aarch64 aarch64 GNU/Linux

Raspberry Pi 4にRaspberry Pi OSの64-bit版をインストールしていますからLinux/aarch64として表示されました。

次に、Linux/amd64のDockerコンテナーを実行してみます。

$ docker run --rm --platform=linux/amd64 ubuntu uname -a
Linux caaf7b74ff80 5.15.61-v8+ #1579 SMP PREEMPT Fri Aug 26 11:16:44 BST 2022 x86_64 x86_64 x86_64 GNU/Linux

確かに、Linux/x86_64 (= amd64) のDockerコンテナーを実行していることがわかります。

念のために、Dockerコンテナーのアーキテクチャーを確認してみます。

$ docker inspect --format='{{.Architecture}}' ubuntu
amd64

しっかり”amd64″となっています。

実際には、実行時にQEMUでのエミュレーションが入ることからパフォーマンスなどは期待出来ないと思われますがDockerの便利さの一つではないかと思われます。

参考: 2022/01/07 DockerのマルチCPUアーキテクチャー対応

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!
目次