Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

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

ykshr
(´・ω・`)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away