.NetCoreをRaspberry Pi上のdockerでパッと動かしたい
Announcing .NET Core 2.1 | .NET Blogでアナウンスされたように、.NetCore2.1からAlpineLinuxとARM32がサポートされた。これにより、Raspberry Piのdocker上で.NetCoreを動作させることが可能になった。PiBakeryを使って、docker上で動く.NetCoreの環境をRaspberry Pi上に作ってみる。
PiBakery?
Raspberry PiはOSインストールがちょっと面倒だ。PiBakeryを使えばScratch風のGUIで簡単にセットアップの手順を設定し、ボタン1つでSDカードに書き込みできる。書き込み終わったSDカードをRaspberry Piにセットし、電源を入れればセットアップが全て完了するという優れものだ。Wifiの設定もできるので外付けのキーボードもマウスもつけなくても、即ssh接続が可能になる。じゃあどうせならPiBakeryで、.NetCoreが動くところまで一気に作ってみよう!ということでやってみた。
PiBakeryレシピの作成
今回最終的に作ったものはこちら。
Raspberry Pi: Raspberry Pi 3 Model B+
OS: Raspbian Lite (stretch)
Release: 9.3
HostOS: Windows 10 Pro (64bit)
PiBakery: v0.3.8
1. 基本のセットアップ
PiBakeryを使ってRaspberryPi Zero Wをヘッドレスでセットアップする
こちらの記事を参考にさせて頂きサクッと。こいつをベースに肉付けしていく。
※最近のバージョンのPiBakeryではdhcpcdの再起動処理がコメントアウトされていて、後ろのブロックにインターネット接続する処理があるとうまくいかなかった。コメントアウトされている以下の処理をSetup Wifi の後ろにRunCommandで書けば再起動される。
systemctl daemon-reload && sleep 5
systemctl restart dhcpcd && sleep 5
2. IPアドレス設定
固定IPをRapsberryPiに振る。/etc/dhcpcd.confにstatic ipの情報を追記するため、以下のアドレスを適切に書き換えてPiBakeryのRunCommandで追加。
echo "interface wlan0" >> /etc/dhcpcd.conf # eth0(LAN cable) or wlan0(wifi)
echo "static ip_address=192.168.xxx.xxx/24" >> /etc/dhcpcd.conf
echo "static routers=192.168.xxx.xxx" >> /etc/dhcpcd.conf
echo "static domain_name_servers=192.168.xxx.xxx" >> /etc/dhcpcd.conf
[参考]
3. raspi-config(非対話モードで実行)
raspi-configを非対話モードで実行し、ロケールやメモリ節約の設定を行っておく。
## locale
sudo raspi-config nonint do_change_locale ja_JP.UTF-8
## timezone
sudo raspi-config nonint do_change_timezone Asia/Tokyo
## wifi country
sudo raspi-config nonint do_wifi_country JP
## Save memory usage
### Memory for GPU
sudo raspi-config nonint do_memory_split 16
### Disable Camera
sudo raspi-config nonint do_camera 1
[参考]
- Raspbianのインストールと最強の初期設定 | 純規の暇人趣味ブログ
- raspi-configをコマンドラインで実行する。 | ラズパイ好きの日記
- Raspberry Piのメモリーを節約する | ものづくりエクスペリメント
4. Docker環境構築
以下をPiBakeryのコマンドとして追加。
# curlでdockerのinstallスクリプトを実行
curl -sSL https://get.docker.com | sh
# sudo権限なくてもdockerコマンド使えるようにdockerグループにpiユーザーを追加
sudo usermod -aG docker pi
# 再起動
sudo systemctl daemon-reload
sudo systemctl restart docker
[参考]
5. .NetCoreイメージの取得
.Net Core 2.1 の SDK と Runtime イメージをpull。他にもほしいイメージがあれば同様に取得できる。
docker pull microsoft/dotnet:2.1-runtime
docker pull microsoft/dotnet:2.1-sdk
[参考]
まとめ
Run Command
がずらずらと並ぶ結果になったので正直普通にシェルスクリプトを書いてそれを呼ぶように工夫するほうが良いと思う。もしくは、PiBakeryには自作のblockを登録する仕組みがあるので、自作ブロックを作っても良い。→作ってみた。
このあとは作成した.NetCoreアプリをスムーズに今回用意したRaspberry Pi上にデプロイし、リモートデバッグできるようにしたいが、とりあえず今回はここまで。