はじめに
DockerがRaspberry Pi(Raspbian Jessie)をサポートしたみたいです。
参考:Git - docker/docker - Add support to install Docker on raspbian/jessie #24815
Dockerを使ってLチカをやってみましたので、その手順をまとめておきます。
参考:Get Started with Docker 1.12 on Raspberry Pi
環境
Raspberry Pi 3 MODEL B
Mac(Raspberry Piの初期設定で使用)
手順
Raspbianのインストール
まず、SDカードにインストールするためのイメージを準備します。
今回は、Raspbian Jessieを使いますので、ここから最新版のイメージをダウンロードします。
※ 記載時点の最新版は、2016-05-27-raspbian-jessie.zipでした。
ダウンロードしたRaspbian Jessieのzipファイルを解凍します。
$ tar zxvf 2016-05-27-raspbian-jessie.zip
x 2016-05-27-raspbian-jessie.img
ここからは、SDカードにイメージをインストールしていきます。
まず、イメージをインストールするSDカードを確認します。
$ df -ah
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 30Gi 2.5Mi 30Gi 1% 0 0 100% /Volumes/UNTITLED
SDカードをFAT32でフォーマットします。
$ diskutil eraseDisk FAT32 RPI /dev/disk1
Started erase on disk1
Unmounting disk
Creating the partition map
Waiting for the disks to reappear
Formatting disk1s2 as MS-DOS (FAT32) with name RPI
512 bytes per physical sector
/dev/rdisk1s2: 62501024 sectors in 1953157 FAT32 clusters (16384 bytes/cluster)
bps=512 spc=32 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=62531584 bspf=15260 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk1
SDカードをアンマウントします。
※ SDカードはまだ抜かないで下さい!
$ diskutil unmountDisk /dev/disk1
Unmount of all volumes on disk1 was successful
先ほど準備しておいたイメージをSDカードに書き込みます。
$ sudo dd bs=1024m if=2016-05-27-raspbian-jessie.img of=/dev/rdisk1
Password:
3+1 records in
3+1 records out
4019191808 bytes transferred in 440.337320 secs (9127529 bytes/sec)
これでSDカードの準備は完了です!
Raspbianの接続と初期設定
先ほど準備したSDカードをRaspberry Piに挿して電源をONします。
Raspberry Piが起動後、SSHで接続します。
Raspberry PiのIPアドレスは、PINGやDHCPログなどから確認したものを入力します。
$ ssh pi@<Raspberry PiのIPアドレス>
初期設定として固定IPを設定します。
※ Dockerにはまったく関係ないです
pi@raspberrypi:~ $ sudo vi /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.0.11/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
Dockerのインストール
本題です!
Raspberry PiにDockerをインストールします。
pi@raspberrypi:~ $ curl -sSL https://get.docker.com/ | sh
+ sudo -E sh -c mkdir -p /etc/systemd/system/docker.service.d
+ sudo -E sh -c echo '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd --storage-driver overlay -H fd://' > /etc/systemd/system/docker.service.d/overlay.conf
+ sudo -E sh -c sleep 3; apt-get update
Get:1 http://archive.raspberrypi.org jessie
(省略)
+ sudo -E sh -c docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 05:31:15 2016
OS/Arch: linux/arm
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 05:31:15 2016
OS/Arch: linux/arm
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker pi
Remember that you will have to log out and back in for this to take effect!
Dockerがインストールできました。
バージョンは1.12.1です。
ためしにraspbian:jessieを起動してみます。
pi@raspberrypi:~ $ sudo docker run -ti resin/rpi-raspbian:jessie /bin/bash
Unable to find image 'resin/rpi-raspbian:jessie' locally
jessie: Pulling from resin/rpi-raspbian
2c21a521f21e: Pull complete
d99cff50dc11: Pull complete
c1c51ee47f0b: Pull complete
e8b3c50e8e7e: Pull complete
a3ed95caeb02: Pull complete
7f56c2fb9a9c: Pull complete
75010306b0df: Pull complete
8837443d430d: Pull complete
23dd9b04a2ec: Pull complete
Digest: sha256:b6aef386a6da25bfbcba0e14a748e5473ff798233155fad960ae08fa4c94b146
Status: Downloaded newer image for resin/rpi-raspbian:jessie
root@f94112ff9ddc:/#
起動しました!
DockerコンテナからLチカ
Raspberry Piということで、コンテナからLチカしてみます。
ハードウェア
Raspberry PiとLEDを接続します。
回路図の通りRaspberry PiにLEDをつなぎました。
ソフトウェア
コンテナとプログラムを準備します。
まず、コンテナですが、Lチカでは、/dev/memにアクセスしますので、コンテナの起動方法として2つあるのかなと思います。
- privilegedオプションを付けてコンテナを起動する → こちらを記載
- deviceオプションで/dev/memを指定してコンテナを起動する
特にデバイスへのアクセスを制限する必要もありませんので、privilegedオプションを付けてコンテナを起動します。
pi@raspberrypi:~ $ sudo docker run -ti --privileged resin/rpi-raspbian:jessie /bin/bash
root@3bfcfa574e1e:/#
今回は、pythonのrpi.gpioを使ってLチカします。
必要なパッケージとライブラリをインストールします。
root@3bfcfa574e1e:/# apt-get update
root@3bfcfa574e1e:/# apt-get install python python-pip python-dev gcc make vim
root@3bfcfa574e1e:/# pip install rpi.gpio
LEDを点滅させるプログラムを作成します。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
led_pin = 17
GPIO.setup(led_pin, GPIO.OUT)
while(True):
GPIO.output(led_pin, GPIO.HIGH)
time.sleep(1)
GPIO.output(led_pin, GPIO.LOW)
time.sleep(1)
チカチカ
プログラムを実行します。
root@3bfcfa574e1e:/# python chikachika.py
チカチカしました。
おわりに
Dockerでは、キレイな環境をクイックに準備できるので、Raspberry Piと親和性が高そうな気がしました。