Raspberry Pi 4BのCPUは4 core 1.5 GHzであり,サーバー用途としては十分ですが,開発環境としては遅いです.当たり前ですがIntel 4 core 3.2GHz CPUと比較すると処理速度は遅いです*1. 最近はDockerがマルチプラットフォームビルドに対応しているので,x64の開発環境でDocker imageをビルドしたものをarmのRaspberry Pi 4Bで実行することができます.
Docker Buildx | Docker Documentation
Raspberry PiにDockerをインストール
Debian系列のOSにDockerをインストールする手順は,以下の公式ドキュメントに記載されています.
Install Docker Engine on Debian | Docker Documentation
https://get.docker.com/からダウンロードしたシェルスクリプトを実行するだけでDockerがインストールできるので便利です.
開発用のマシンでイメージをビルド
macにインストールしたDocker 20.10.2 darwin/amd64 を使って,以下のような簡単なイメージを作成します.
Dockerfile
FROM python:3.8-slim-buster CMD python --version
Raspberry Piは linux/arm/v7ですので,platformオプションを指定して,Raspberry Pi用にビルドします.
$ docker buildx build --platform linux/arm/v7 --tag rasp:latest .
イメージを転送
Dockerではcontainer registryにpullしたりpushしたりすることが多いですが,手元にあるパソコンから手元にあるRaspberry Piにイメージを転送するのにわざわざ外部にあるcontainer registryを使うのは大袈裟ですし,間違って公開してしまうかもしれません.手元にcontainer registryを作るのも面倒です.
Dockerにはファイルシステムを介してイメージを転送するsave/loadコマンドがあるので,これを使います.まずはsaveコマンドでrasp
タグがついたイメージをrasp.tar
に書き出します.
$ docker save -o rasp.tar rasp
rasp.tar
ファイルをUSBスティックにコピーして,Raspberry Piに接続し,loadコマンドで読み込みます.
$ docker load -i rasp.tar
Raspberry Piでイメージを実行
イメージを実行してみます.
$ docker run -it --rm rasp:latest Python 3.8.8
Dockerfileのcommand python --version
が実行され,Pythonのバージョンが正しく表示されました.darwin/amd64でlinux/arm/v7用のイメージが正常にビルドでき,マルチプラットフォームな開発ができることが分かりました.
*1:開発環境としては消費電力が低いことよりも,開発者を待たせないことが重要です.