13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

x86マシンでARM用dockerコンテナを実行する方法

Last updated at Posted at 2021-06-08

通常、docker上で動作するコンテナはホストのCPUアーキテクチャと一致する必要がある。
例えばx86用コンテナはx86マシンでしか動かないし、ARM用コンテナはARMマシンでしか動かない。

しかし、x86上でARMコンテナをビルドしたい場合もでてくる。
そこでQEMUというCPUエミュレータを使用すると異なるCPUアーキのコンテナを動作させることができる。

QEMUの準備

以下のようにQEMUをインストールして、設定をおこなう。

sudo apt-get install qemu binfmt-support qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes

Dockerへの設定

コンテナ内に/usr/bin/qemu-aarch64-staticを配置することでARMコンテナをx86で実行することができる。
以下の二通りの実現方法があるので、目的に合わせて使用する。

1. docker runで使用する場合

-vオプションを使用してqemu-aarch64-staticをコンテナ内にマッピングする。

docker run -it --rm -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static image_name

2. Dockerfileで使用する場合

事前にqemu-aarch64-staticをカレントディレクトリ(Dockerfileと同じ場所)にcopyしておく。

cp /usr/bin/qemu-aarch64-static .

Dockerfile内でCOPYコマンドでcopyする。注意点としてはRUNコマンドよりも前にCOPYが実行されるようにすること。

COPY ./qemu-aarch64-static /usr/bin/qemu-aarch64-static

# RUN コマンドの前にCOPYする
RUN command_hogehoge

注意点

  • CPUエミュレータを使ってARMバイナリを随時x86に翻訳しているため、プロジェクトのビルドなどを実行するととても重くなるため注意
  • あくまでもapt等でパッケージをインストールするだけという利用法が無難

参考

13
17
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
13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?