ラズパイ Zero W（ARM v6l）Buster Lite に Docker と docker-compose をインストールする手順【2019/09/29 版】

> 🐒 &nbsp;<font color=blue>2019/10/17 更新</font>
> **従来通りのインストール手順でラズパイ Zero の Raspbian でも Docker をインストールできる**ようになりました！ 
> 
> - [Issue #709: Docker-CE need updating for raspbian buster](https://github.com/docker/for-linux/issues/709#issuecomment-545349413) | Docker for Linux @ GitHub
> 
> ```bash:Dockerは、これでOK!
> curl https://get.docker.com | sh
> ```
> 
> ```bash:docker-composeは、これでOK!
> apt install docker-compose
> ```
> - 確認済み OS: [2019-07-10-raspbian-buster-lite](https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-07-12/).zip
> - 確認済みハード: RaspberryPi Zero WH (`ARMv6l`/`BCM2835`/`Rev.9000c1`)

以下は、公式（従来通り）の方法でインストールできない場合の、**RaspberryPi Zero W に arm32v6 用 Docker CE と docker-compose をインストールする手順**です。
<h1>Docker on Buster for RPi Zero W</h1>

- 確認日：2019/09/29
- RaspberryPi: Zero W（`ARMv6l`/`BCM2835`/`Rev.9000c1`）
- Raspbian: v10 Buster（[2019-07-10-raspbian-buster-lite](https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-07-12/).zip）
    - v9 Stretch に Docker と docker-compose をインストールしたい場合は以下。<br><sup>「 [ラズパイ Zero W（ARM v6l）Stretch Lite に Docker と docker-compose をインストールする手順【2019/09 版】](https://qiita.com/KEINOS/items/050b9e277569fabd484e)」@ Qiita</sup>

## TL;DR（ワンライナー）

```bash:Dockerのインストール（現在は不要）
cd /tmp && wget https://packagecloud.io/Hypriot/rpi/packages/raspbian/buster/containerd.io_1.2.6-1_armhf.deb/download.deb && sudo dpkg -i download.deb && sudo curl -sL get.docker.com | bash && sudo rm download.deb
```
```bash:docker-composeのインストール
sudo curl -L --fail https://keinos.github.io/Dockerfile_of_Docker-Compose_for_ARMv6l/run.sh -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
```

```bash:【メモ】sudoなしでdockerコマンドを実行する
sudo gpasswd -a $USER docker
```

> <sup>🐒 &nbsp;<font color=red>注意</font>: ARMv7 のラズパイ３や Intel マシンに比べて、ラズパイ Zero は ARMv6 なのでコンテナの作成や docker コマンドのレスポンスは正直に言ってモッタリです。それでも、コンテナが一旦起動すれば「速くはない。でもまぁ普通」って感じなので、起動速度よりメンテナンス／リカバリーや開発速度を優先したい場合は、ラズパイ Zero でもかなり有効だと感じました。</sup>

## TS;DR

### Docker のインストール手順

以下は、公式の方法でインストールできない場合の手順です。

1. RaspberryPi Zero W に Buster Lite をインストール、ロケールの設定などを行う。
    - [ヘッドレス RaspberryPi Zero WH 用のブートイメージ作成（Wi-Fi 設定済み SSH 有効済み）](https://qiita.com/KEINOS/items/43394e4bd3c8fcfb5ee8) @ Qiita

1. armhf 版 `containerd.io` の v1.2.6-1 をあらかじめインストールする。（もしくは v1.2.6-1 にダウングレードする。2019/10/02 現在 v1.2.6-3 では動作しません。）

    ```shell-session
    $ cd /tmp
    $ wget https://packagecloud.io/Hypriot/rpi/packages/raspbian/buster/containerd.io_1.2.6-1_armhf.deb/download.deb
    ...
    $ sudo dpkg -i download.deb
    ...
    $ sudo rm download.deb
    ```

1. 公式の Docker インストールスクリプトを実行する。

    ```shell-session
    $ sudo curl -sL get.docker.com | bash
    ...
    ```
1. Docker が動くか確認する

    ```shell-session
    $ docker version
    Client: Docker Engine - Community
     Version:           19.03.2
     API version:       1.40
     Go version:        go1.12.8
     Git commit:        6a30dfc
     Built:             Thu Aug 29 06:18:36 2019
     OS/Arch:           linux/arm
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.2
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.8
      Git commit:       6a30dfc
      Built:            Thu Aug 29 06:12:41 2019
      OS/Arch:          linux/arm
      Experimental:     false
     containerd:
      Version:          1.2.6
      GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
     runc:
      Version:          1.0.0-rc7+dev
      GitCommit:        029124da7af7360afa781a0234d1b083550f797c
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    ```

1. 必要なら（毎回 `sudo` をつけるのが面倒なら）現在のユーザーを `docker` グループに追加する

    ```
    sudo usermod -aG docker $USER
    sudo reboot now
    ```

### docker-compose のインストール手順

Stretch と同じ手順なので、そちらをご覧ください。

- [ラズパイ Zero W（ARMv6l）Stretch Lite に docker-compose をインストールする手順](https://qiita.com/KEINOS/items/050b9e277569fabd484e#docker-compose-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86) @ Qiita

### メモリ不足によるビルドに失敗する場合

ラズパイ Zero のメモリのスワップサイズは 100 MB です。コンパイルだけでなく、イメージのビルドでも失敗することがあります。その場合は、スワップ・ファイルのサイズを増やします。

- [ラズパイ Zero のスワップ領域の増やし方](https://qiita.com/KEINOS/items/43394e4bd3c8fcfb5ee8#%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97%E9%A0%98%E5%9F%9F%E3%81%AE%E5%A2%97%E3%82%84%E3%81%97%E6%96%B9) @ Qiita

## 参考文献

- [Docker-CE need updating for raspbian buster](https://github.com/docker/for-linux/issues/709#issuecomment-516496192) | Issue #709 | Docker @ GitHub
- [How to install docker on a Raspberry Pi Zero W running Raspbian Buster](https://markmcgookin.com/2019/08/04/how-to-install-docker-on-a-raspberry-pi-zero-w-running-raspbian-buster/) @ markmcgookin