2
4

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.

ARMアーキテクチャ向けにDockerイメージをビルドする for ラズパイ

Last updated at Posted at 2021-08-17

はじめに

IntelやAMDといったx86アーキテクチャ向けにしか提供されていないDockerイメージをラズパイ上で利用しようとするとエラーが発生してしまいます。
例えば、ラズパイ上でdocker runで起動しようとすると以下のようなexec format errorが出たり、、

standard_init_linux.go:211: exec user process caused "exec format error"

docker pullを実行すると以下のようなno matching manifestというエラーが出たりします。
試しにARM向けのイメージが提供されていないmysqlの公式イメージをpullしてみると、以下のようなエラーが発生しました。

$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries

ラズパイに搭載されているCPUはARMアーキテクチャのものであり、当然ながらCPUのアーキテクチャが異なるイメージを動かすことはできません。
しかし、ARM向けにDockerイメージをビルドすればラズパイ上でもそのイメージが利用できるようになります。

今回は例としてオープンソースの経路検索エンジンOSRM backendのDockerイメージを使って解説します。
(ラズパイで経路検索サーバをたてようとしたのですがOSRM backendのイメージがARMに対応しておらず、環境構築に少し手間取ってしまったため今回の記事を書く発端となっています)

前提

今回検証した環境は以下の通りです。

[ラズパイ]
機種: Raspberty PI 4 Model B
メモリ: 8GB
OS: Raspbian OS 64bit

[作業マシン]
MacBook Pro: 2019
メモリ: 16GB
SSD: 250GB

[Docker]
バージョン: 20.10.7
(buildxを使うのでバージョン19.03以降のものを使用します)

なお、ラズパイ上イメージをビルドしても良いのですが、手元のMacの方が処理が速いため
今回はMac上でビルドするものとします。

手順

1: ORSM backendのプロジェクトをgit cloneしてDockerファイルをプロジェクトフォルダ直下にコピーします。

git clone https://github.com/Project-OSRM/osrm-backend.git
cd osrm-backend/docker
cp Dockerfile ../
cd ..

2: ARMのCPU向けにdockerのイメージをビルドします。ここではdockerのbuildxを使います。

docker buildx build --platform linux/arm64/v8 --tag osrm-backend-arm64:latest  .

パラメータの--platformがポイントです。
上に書いたno matching manifest for linux/arm64/v8 in the manifest list entriesというエラーメッセージにプラットフォーム名が表示されるのでこれと同じ文字列を指定します。
ここではlinux/arm64/v8を指定します。
なお、ビルドは非常に時間がかかります。自分のMacでは1時間以上かかりました。。。

3: イメージをtar形式で保存します。
以下を実行してosrm-backend-arm64という名前のイメージがtar形式で保存します。

docker save -o osrm-backend-arm64.tar osrm-backend-arm64

4: scpなどで作業マシンからラズパイへtar形式のイメージをコピーします。
scpのパラメータ(ポート番号、ユーザ名、ホスト名等)は適宜ご自身の環境に合わせて指定してください。
(ここでは公開鍵認証を使っています)
tarはラズパイ上の/tmpにコピーするものとします。

scp -P xxx -i ~/.ssh/id_rsa osrm-backend-arm64.tar yyy@aaa.bbb.ccc.ddd:/tmp

5: ラズパイにsshでログインしてコピーしたイメージをラズパイのdocker上にロードします。

cd /tmp
docker load -i osrm-backend-arm64.tar

以上でARMのCPUを搭載しているラズパイでもOSRM backendのイメージが利用できるようになります。

まとめ

今回はOSRM backendを題材に挙げましたが、他にもIntel/AMD向けのイメージしか提供されていないイメージをラズパイでも動かしたい場合はbuildxを使うことで利用可能となります。

参考資料

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?