Raspberry pi に Docker ＆ docker-compose をインストールする方法

# 1. はじめに
今回は、自分自身への備忘録を兼ねて、Raspberry Pi に Docker ＆ docker-compose をインストールする方法を、お伝えしたいと思います。

- 参考：[Docker comes to Raspberry Pi](https://www.raspberrypi.org/blog/docker-comes-to-raspberry-pi/)
- 参考：[Get Started with Docker on Raspberry Pi](https://blog.alexellis.io/getting-started-with-docker-on-raspberry-pi/)
- 参考：[Raspberry Pi にDockerとDocker-composeを入れる](https://qiita.com/hawk777/items/467ea47377e69089de5b)
- 参考：[Raspbian Jessie Lite で Docker する - インストール編](https://azriton.github.io/2017/03/30/Raspbian-Jessie-Lite%E3%81%A7Docker%E3%81%99%E3%82%8B-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E7%B7%A8/)
- 参考：[Raspbian Jessie Lite で Docker する - GPIO on Alpine Linux 編](https://azriton.github.io/2017/04/05/Raspbian-Jessie-Lite%E3%81%A7Docker%E3%81%99%E3%82%8B-GPIO-on-Alpine-Linux%E7%B7%A8/)



# 2. この記事を読んでできること
- Raspberry Piで Docker ＆ docker-compose を使えるようになる。

# 3. 注意事項
- Docker のアーキテクチャは、armhf（ARM 32ビット）版となります。
- Raspberry piでは、ARM版のDockerコンテナしか使えないと思われる。
- Raspberry piでは、ホストOSが32ビットとなるため、ゲストOSも32ビットにしばられると思われる。
- しばりなくDockerを自由に使いたい方は64bitのホストOS（Windows／MacOS／Linux）にてDockerを使った方が幸せかもしれません。

# 4. 必要なもの
- Raspberry Pi（この記事では Raspberry Pi3B+ を利用）
- SDカード（この記事では Raspbian Buster Lite を利用）
- インターネット環境

# 5. dockerのインストール
- Dockerをインストールします。
- Dockerだけの利用でよければ、以下のコマンドだけで完了です。

```plaintext:コマンドプロンプト
// インストール
$ curl -sSL https://get.docker.com | sh

// グループの追加
$ sudo usermod -aG docker pi

// OS再起動（グループ追加を反映）
$ sudo shutdown -r now

// dockerサービスの有効化
$ sudo systemctl enable docker

// バージョン確認
$ docker --version
ocker version 19.03.6, build 369ce74
```

# 6. docker-composeのインストール
- docker-composeのインストールをインストールします。
- docker-compose.yml とかを使ってみたい方は、以下のコマンドも実行しましょう。

```plaintext:コマンドプロンプト
// ディレクトリ移動
$ cd /opt

// composeを入手
$ sudo git clone https://github.com/docker/compose.git

// ディレクトリ移動
$ cd /opt/compose

// ブランチの切り替え
$ sudo git checkout bump-1.23.2

// テキストファイルを編集
$ sudo sed -i -e 's:^VENV=/code/.tox/py36:VENV=/code/.venv; python3 -m venv $VENV:' script/build/linux-entrypoint

// テキストファイルを編集
$ sudo sed -i -e '/requirements-build.txt/ i $VENV/bin/pip install -q -r requirements.txt' script/build/linux-entrypoint

// Dockerイメージの作成（30分程度かかる）
$ sudo docker build -t docker-compose:armhf -f Dockerfile.armhf .

// docker-composeのバイナリ作成
docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"

// docker-composeバイナリをbinディレクトリ配下に移動
$ sudo cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose

// rootに所有者を変更
$ sudo chown root:root /usr/local/bin/docker-compose

// パーミッション（実行権限）を付与
$ sudo chmod 0755 /usr/local/bin/docker-compose

// バージョン確認
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
```

# 7. dockerの動作確認

```plaintext:コマンドプロンプト
// OS再起動（念のため）
$ sudo shutdown -r now

// dockerの実行（ハローワールド）
$ docker run --rm hello-world
```

# 8. docker-composeの動作確認
- docker-compose.ymlファイルを作成し、ファイル保存する。

```yml:docker-compose.yml
version: "2"

services:
  app:
    image: hello-world

```

- docker-composeを実行する。

```shell:コマンドライン
// docker-compose.ymlファイルが存在することを事前確認
$ ls
docker-compose.yml

// docker-composeを実行
$ sudo docker-compose up
```

# 9. 参考：Dockerコマンド、docker-composeコマンド
- [（備忘録）Dockerコマンド](https://qiita.com/zono_0/items/7a25d283cd4b09d6ffb0)

# 10. おわりに
いかがでしたでしょうか？意外と簡単にDocker ＆ docker-composeをはじめることができたのではないかなと思います。
今回の記事が、みなさまの学習の参考になれば幸いです。

2020/02/22 TAKAHIRO NISHIZONO