Edited at

Docker on Raspberry PiのインストールとLチカ

More than 1 year has passed since last update.


はじめに

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をつなぎました。

Screen-Shot-2016-08-20-at-09-40-46-1.png

引用:Get Started with Docker 1.12 on Raspberry Pi


ソフトウェア

コンテナとプログラムを準備します。

まず、コンテナですが、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を点滅させるプログラムを作成します。


chikachika.py

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と親和性が高そうな気がしました。