きっかけ
なんとなくです、と言うとアレなので強いて言うのであれば、出先でもラズパイなあれこれの開発をしたいと感じたから、です。持ち歩くのもアレなのでDockerで頑張ることにしました。
作業環境
- ThinkPad X13 Gen2i
- Ubuntu 22.04
Docker version 20.10.17, build 100c701
作業
主にこちらの記事を参考にしました。
RaspberryPi OS 32bit armhf / armv7l の Docker Image 作成と起動
公式のRootファイルシステムのダウンロード
wget https://downloads.raspberrypi.org/raspios_full_arm64/root.tar.xz
ついでにハッシュ確認をしたかったのですがここの中では見つけられませんでした。ちなみにこうなりました。
$ sha256sum root.tar.xz
e8fd091305558e1f8c1ff44c905e28618cac159afbaa9513420427fe98362256 root.tar.xz
Dockerにインポート & イメージ作成
リポジトリ名とタグ名に注意してセットします。
$ docker image import root.tar.xz {リポジトリ名}/raspios_full_arm64:2022-04-04_bullseye
sha256:06a8e8313fea7b441c6084ce7ee3aa24991c56b97cd3e60c6ca8446246177b13
作成されたイメージの確認をします。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
na2na/raspios_full_arm64 2022-04-04_bullseye 9524f8db1176 20 seconds ago 4.64GB
作成されたイメージからコンテナの作成と起動確認
QEMUのStaticモジュールを使用して起動します。
$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
$ docker run -it --rm \
-v `pwd`:/workspace \
na2na/raspios_full_arm64:2022-04-04_bullseye bash
確認ができたらexitで抜けます。
パッケージのアップグレードをしたイメージの作成
そのままDockerHubにPushするのもなんだか嫌だったので...。ここからはなんとな〜くやってるので間違っているところがあるかもしれません。200以上更新あってまあまあかかりました。
$ docker run -it na2na/raspios_full_arm64:2022-04-04_bullseye bash
してコンテナ作成をします。
# apt update && apt upgrade -y
して終わったらctl+p ctl+q
抜けます。次にコンテナIDの確認をします。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c49f015a44c na2na/raspios_full_arm64:2022-04-04_bullseye "bash" 3 minutes ago Up 3 minutes nervous_turing
最後にdocker commit
します。
$ docker commit 2c49f015a44c na2na/raspios_full_arm64:2022-09-07_bullseye
一応起動確認します
$ docker run -it na2na/raspios_full_arm64:2022-09-07_bullseye
DockerHubにPushする
$ docker login # DockerDesktopがあるならそっちでも良さそう
$ docker images # イメージの確認
REPOSITORY TAG IMAGE ID CREATED SIZE
na2na/raspios_full_arm64 2022-09-07_bullseye 920f69ea5844 2 minutes ago 6.32GB
$ docker push na2na/raspios_full_arm64:2022-09-07_bullseye
終わりに
特に作業で引っかかる箇所はありませんでした。安心してラズパイ関係の開発ができますね。
なおliteで良かったんじゃないかという声も(私の中では)ありますが、それは同じ手順で作ればいいだけなんじゃないですかねというのでひとつ