Raspberry Piにdockerとdocker-composeを入れてみた

[前回](https://qiita.com/hoshi621/items/a64a77e5fba6b8b633bf)はラズパイへのOSの書き込みを行いました。
今回の記事では、Raspberry Piへのdockerとdocker-composeの構築について書きます。

# 環境
- Raspberry Pi 3 Model B+
- Raspbian 9.11(stretch)
- Kernel 4.19.66-v7+

```Bash
$ uname -a
# Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux
$ lsb_release -a                 
# No LSB modules are available.
# Distributor ID: Raspbian
# Description:    Raspbian GNU/Linux 9.11 (stretch)
# Release:        9.11
# Codename:       stretch
```


# dockerのインストール

まずdockerのインストールを行います。
[dockerの公式ページ](https://docs.docker.com/install/linux/docker-ce/debian/)を参考にインストールしていきます。
最初は`apt`で入れようとしましたが、うまくいきませんでした。

Raspbianでは[スクリプトを使用したインストール](https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-convenience-script)を利用するのが良さそうです。
下記コマンドで簡単にインストールできました。

```Bash
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
```
バージョンが表示されればインストール成功です。

```Bash
$ docker --version
# Docker version 19.03.5, build 633a0ea
```
次にユーザー権限の設定をしておきましょう。
これを行わないと後のdocker-composeのインストールで`permission denied`します。

```Bash
$ sudo usermod -aG docker YOUR-USER
```
また、ラズパイの起動時にdockerが自動起動するように設定します。
設定完了したら再起動しておきましょう。

```Bash
$ sudo systemctl enable docker
$ sudo reboot
```

# docker-composeのインストール

次にdocker-composeのインストールを行います。
docker-composeのバージョン[1.24.1](https://github.com/docker/compose/releases/tag/1.24.1)までは公式サイトにラズパイ用のバイナリがなかったため、エラーと格闘しながらインストールしている記事が多々ありました。
しかし、1.25.0以降からマルチプラットフォームの[ビルド用のスクリプト](https://github.com/docker/compose/blob/1.25.x/script/build/linux)を使用することで簡単にラズパイへのdocker-composeのインストールができるようになりました。
今回インストールするバージョンは[1.25.3](https://github.com/docker/compose/releases/tag/1.25.3)です。

まず、[github](https://github.com/docker/compose.git)からクローンします。
最新バージョンは`1.25.3`なので、ブランチをチェックアウトしておきます。（2020/1/29現在）

```Bash
$ git clone https://github.com/docker/compose.git
$ cd compose
$ git checkout 1.25.3
```
次にビルド用スクリプトを用いてビルドします。
時間がかかるので気長に待ちましょう。
（途中で本当に動いてるのか不安になりましたが、一晩放置したら終了してました。よかった、、、）

```Bash
$ ./script/build/linux
```

ビルドに成功していれば、`dist`ディレクトリが作成され、その中にバイナリが生成されています。
実行してバージョンを確認してみましょう。

```Bash
$ cd dist
$ ./docker-compose-Linux-armv7l version
# docker-compose version 1.25.3, build d4d1b42b
# docker-py version: 4.1.0
# CPython version: 3.7.5
# OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
```
生成されたバイナリの名前は、ビルドした環境に合わせたものになるようです。
今回の環境では`docker-compose-Linux-armv7l`となっていました。

ちなみに、依存関係は以下のようになっています。

```Bash
$ ldd docker-compose-Linux-armv7l
# linux-vdso.so.1 (0x7ec31000)
# /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76ee6000)
# libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76ebf000)
# libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0x76e98000)
# libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76d59000)
# /lib/ld-linux-armhf.so.3 (0x76f23000)
```

このままでは`docker-compose`のコマンドが使えないため、バイナリを`bin`にコピーしましょう。

```Bash
$ docker-compose version
# bash: docker-compose: command not found
$ sudo cp docker-compose-Linux-armv7l /usr/local/bin/docker-compose
$ sudo chown root:root /usr/local/bin/docker-compose
$ sudo chmod 755 /usr/local/bin/docker-compose
```

これで`docker-compose`コマンドが使用できるようになりました。


```Bash
$ docker-compose version
# docker-compose version 1.25.3, build d4d1b42b
# docker-py version: 4.1.0
# CPython version: 3.7.5
# OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
```

今回はここまでです！


## 参考

- [RaspberryPIでDocker環境構築](https://qiita.com/asubee/items/f31ee56a8194faec6b16)
- [Raspberry Pi用docker-composeの構築 （1.25.0以降）](https://qiita.com/tkyonezu/items/912fb7cfaab2f59276dd)