Docker環境をRaspberryPi上に構築する

ラズパイだからいいや

と思って痛い目を見たわけなんです、はい。

ラズパイは趣味で触っている程度なので、パッケージやライブラリなんかは何も考えずに入れまくっていました。
ある日、プリインストールされていた Python2 を誤って削除したとき、それは起きます。

sudo apt-get upgrade

もはや息をするように叩いて彼が常に Python2 の依存関係エラーで異常終了するようになってしまいました。
当然 Python に依存しているパッケージ群はインストールすることができません。

下記の実行や手動インストールもやってみましたが、すべて思うようにはなりませんでした。

sudo dpkg -P --force-remove-reinstreq パッケージ名
sudo apt-get -f install

「ラズパイだからいいや」なんて思っていたはずなのに、自分が作ったものが動かない環境になってしまったやり場のない悲しみ。
そして最終的には、自分の力が及ばない悔しさを噛み締めながら、OS の再インストールから始める羽目になったのでした。

反省を踏まえて

  1. ラズパイは PC。開発するなら “ローカルはキレイな状態” を保ちたい。
  2. ローカル PC と同じように Docker を導入したい。 <- 本投稿はここ!
  3. ついでにラズパイっぽい環境(TensorFlowの動作環境)を構築したい。
  4. 誰かが自分のような失敗をしないよう役に立ちたい。

という気持ちをもって本投稿を書きます。
(ssh や location などの初期設定は割愛します)

RaspberryPi に Raspbian をえいや

ラズパイには豊富な OS イメージが準備されていますが、今回は最もポピュラーな Raspbian を導入します。
https://www.raspberrypi.org/downloads/

ラズパイといえば、”ストレージは SD カード” ですね。
ラズパイの公式ドキュメントは非常に分かりやすく、 SD カードの推奨サイズなども記載されています。
https://www.raspberrypi.org/documentation/installation/sd-cards.md
さらにインストール手順には、作業者の OS ごとに推奨される SD フォーマット、解凍ツールまであるので、一度読んでおくとよいでしょう。

さて実際の作業に入っていきますが、Raspbian を導入する方法は大きく分けて2通りあります。

  1. NOOBS を使用して、ラズパイ起動時に OS を選択してインストール。
  2. SDカードに直接 Raspbian の OS イメージを書き込み。

NOOBSを使用してインストール

公式ドキュメント
https://www.raspberrypi.org/documentation/installation/noobs.md

New Out Of Box Software (NOOBS) is an easy operating system installation manager for the Raspberry Pi.

NOOBS を使えば、簡単にラズパイに OS インストールできまっせ。とのことです。
実際に、ドキュメント通りに進めるだけで非常に簡単です。

  1. https://www.raspberrypi.org/downloads/noobs/ から NOOBS をダウンロード。
  2. SD カードをフォーマット。
  3. 1.で落としたファイルを、SD カードに解凍。
  4. ラズパイに SD カードを挿入し、起動。
  5. NOOBS の OS選択画面にて “Raspbian” を選択 してインストール。

NOOBS には2種類ありますが、オンライン環境があるならどちらでもOKです。
Raspbian と LibreELEC 以外をインストールしたい場合は LITE 版がよいかと思います。

NOOBS NOOBS LITE
インストーラーとOS(Raspbian、LibreELEC) インストーラーのみ
上記のOSならオフラインでインストール可 オンラインでインストール

直接 OS イメージを書き込み

NOOBS を使わずに直接 OS イメージを SD カードに書き込みます。

公式ドキュメント
https://www.raspberrypi.org/documentation/installation/installing-images/README.md

We recommend most users download NOOBS, which is designed to be very easy to use. However, more advanced users looking to install a particular image should use this guide.

簡単な NOOBS がオススメではあるそうです。

  1. https://www.raspberrypi.org/downloads/ から OS イメージをダウンロード(今回は Raspbian)。
  2. SD カードをフォーマット。
  3. 1.で落としたファイルを、SD カードに書き込み。
  4. ラズパイに SD カードを挿入し、起動。

OS イメージを直接書き込んでいるので、ラズパイを起動すればすぐに使用することができます。
ちなみにドキュメント記載の通り、イメージ書き込みには Etcher が便利です。

RaspberryPi に Docker をえいや

それでは実際に Docker をインストールします。

# インストール.
curl -sSL https://get.docker.com/ | sh

# バージョン確認
sudo docker -v

# root ユーザ以外で dokcer を使用できるように
# docker グループに pi ユーザを追加.
sudo usermod -aG docker pi

# 自動起動設定.
sudo systemctl enable docker

ここで一度、再起動しましょう。

sudo reboot

再起動が完了したら、 docker プロセスを立ち上げます。
前述の設定で sudo なしで docker コマンドを使用できるようになっているはずです。

# 今回は stretch(Raspbian9).
# --privileged オプションで ラズパイ(Raspbian)上のデバイスに接続可能.
# --name オプションは好みで.
docker run --name rpi-raspbian-stretch -ti --privileged resin/rpi-raspbian:stretch /bin/bash

動作確認は こちら の方が分かりやすく記載してくださっています。

次回は TensorFlow 環境を構築

Dockerの導入までは非常に簡単にですが、インストールの待ち時間が長いですね。
次回は、TensorFlow環境の構築と簡単なプログラムを実行したいと思います。