Raspberry Pi 4 で x86_64 (AMD64) のコンテナを動かすための方法を記載します。実行パフォーマンスは悪いですが、動作できることに意味がある場合には1つの方法として役立つこともあるかなと思います。
機材情報
以下の機材を使用しています。
- Raspberry Pi 4 8GB モデル
- Raspberry Pi OS Lite (64-bit)
- 2022-09-22 版
microSD カード 32GB 品に OS を焼いて起動しています。
Docker のインストール
Docker をインストール済みの場合には以下の作業は不要です。
$ sudo apt install docker.io
$ sudo usermod -aG docker $USER
このコマンド実行後は所属グループ反映のため、再ログインを行います。
動作の確認
簡単な動作確認として、nginx を動かしてみます。以下のコマンドで起動して、ブラウザで http://localhost:8080/ にアクセスしてみて動いていることを確認しておきます。
$ docker run --rm -p 8080:80 nginx
確認が終わったら、終了しておきます。
動作の確認2
x86_64 のコンテナイメージを取得して、同様に動かしてみます。platform というオプションを設定して、プラットフォームの指定を明示的に行います。
$ docker run --rm -p 8080:80 --platform linux/x86_64 nginx
当然ながら、こちらの場合では動作させることができません。
QEMU User Static (QUS) を使う
QEMU User Static というものを使って、アーキテクチャが違う環境のコンテナを動かすことを可能にします。QEMU User Static は https://github.com/dbhi/qus で公開されているオープンソースのプロダクトです。
インストール
インストールするために、以下のコマンドを実行します。ここでは x86_64 のコンテナを動かしたい目的で QUS を使用するので、 “-p” オプションで x86_64 を指定します。 “–” 以降のパラメータなので、このオプションは docker のポート指定のオプションとは別物になります。
$ docker run --rm --privileged aptman/qus -s -- -p x86_64
動作の確認
先ほど動かなかった、nginx (x86_64) のコンテナを動かしてみましょう。手元で試したところ、少々エラーは出ましたが起動に成功して、ブラウザからのアクセスでテストページの表示が確認できました。
その他
指定できるプラットフォームにはほかにも色々とあるので、使いたい場面が出てきそうな気はします。しかしエミュレーション実行にはなるはずなので、パフォーマンスを要求するものには厳しいでしょう。
おまけ
Raspberry Pi 4 で x86_64 コンテナを動かしたとき、コンテナ内で uname を実行してみたものが以下の図です。
コンテナの中としては x86_64 だと思って動いているようです。
コメント