Raspberry Pi用docker-composeの構築

# Raspberry Pi用docker-composeの構築

[個人用のホームページ](https://tkyonezu.com/)を作成しました。今後は、そちらの方に整理していきたいと思いますので、よろしくお願いします。

2021/01/21 [Raspberry Pi用docker-composeの構築（1.28.0）](https://tkyonezu.com/docker-kubernetes/raspberry-pi%e7%94%a8docker-compose%e3%81%ae%e6%a7%8b%e7%af%89%ef%bc%881-28-0%ef%bc%89/)

[新しいホームページ](https://tkyonezu.com/)の方に、昨日（2021/01/20）に公開された[docker-compose 1.28.0](https://github.com/docker/compose/releases/tag/1.28.0)についての記事を書かせていただきました。

docker-compose の 1.25.0 が公開されましたので、別の記事として以下に書いています。(記：2019/11/22）

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

2019/02/14 に [masnagam](https://qiita.com/masnagam) さんからコメントをいただいた [VirtualEnv の問題](https://github.com/docker/compose/pull/6501/commits/f472fd545be79860a3c9e03b6e63fbacb86977d1) ですが、本日（2019/03/29) 公開された [1.24.0](https://github.com/docker/compose/releases/tag/1.24.0) でも armhf 用は修正されていないようです。そのため、[Various build fixes #6501](https://github.com/docker/compose/pull/6501) のプルリクに合わせて [Dockerfile.armhf](https://github.com/docker/compose/blob/1.24.0/Dockerfile.armhf) を修正する必要があります。（記： 2019/03/29）

このページを書いてから1年半ほど経過して、[docker-compose](https://github.com/docker/compose) も今の (2018/12/07現在) バージョンは [1.23.2](https://github.com/docker/compose/releases/tag/1.23.2) になっています。この __Bugfixes__ には以下の記述があります。

> Reverted a 1.23.0 change that appended random strings to container names created by docker-compose up, causing addressability issues.
Note: Containers created by docker-compose run will continue to use randomly generated names to avoid collisions during parallel runs.

最初に `1.23.1` を使ったときには、この振舞いに困って `docker-compose.yml` ファイルに `container-name:` を追加したりしていましたけど、これで安心です。(2018/12/07 追記)

## 1. ラズパイ用のdocker-compose
　Raspberry Pi3でもdockerを使用することができるのですが、docker-composeはありません。docker公式のリポジトリでdocker-engineの最新版を利用できるのですが、やはりdocker-composeはありません。
　一応、[Hypriot](https://blog.hypriot.com/)のリポジトリを使用すればdocker-composeを使えるのですが現在（2017/04/22)のバージョンは 1.9.0 となっています。
　そこで、github.comにあるdocker公式リポジトリから構築してみることにします。~~ただし、dockerコンテナとして作成していますので起動には時間がかかっています。~~
　正しい構築方法を[yagitechさん](http://yagi.tc/archives/2017/04/24/raspberry-pi-2-mastodon/)のページで教えてもらいましたので、修正追加させてもらいます。ちゃんとdocker-composeのバイナリを作成しています。

## 2. githubからソースを取得
　最初に公式リポジトリからソースを取得します。

```bash
git clone https://github.com/docker/compose.git
```

## 3. docker buildコマンドの実行
　取得したリポジトリにある`Dockerfile.armhf`を使用してビルドします。

```bash
docker build -t docker-compose:armhf -f Dockerfile.armhf .
```

　ここでは、docker-compose:armhfとしています。実際に Raspberry Pi3 でビルドして、約30分ほどかかってコンテナが作成されました。

## 4. dockerコンテナの実行
　できあがったコンテナを実行してみます。

```bash
$ docker run docker-compose:armhf version
docker-compose version 1.13.0dev, build unknown
docker-py version: 2.2.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
```

　`docker-compose version 1.13.0`が正常に動作しています。

　今となっては、これは不要ですが自戒の意味を込めて残しています。

## 5. docker-composeコマンドの作成
　以下が、[yagitechさん](http://yagi.tc/archives/2017/04/24/raspberry-pi-2-mastodon/)のページで教えていただいた方法です。元々は、[Getting docker-compose on Raspberry Pi (ARM) the easy way (updated)](https://www.berthon.eu/2017/getting-docker-compose-on-raspberry-pi-arm-the-easy-way/)を参照しているそうです。

```
docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"
```

　この結果`dist`ディレクトリに`docker-compose-Linux-armv7l`ができますから`/usr/local/bin`ディレクトリにコピーします。

```bash
cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose
chown root:root /usr/local/bin/docker-compose
chmod 755 /usr/local/bin/docker-compose
```

　できあがったコマンドを実行します。

```bash
$ docker-compose version
docker-compose version 1.13.0dev, build unknown
docker-py version: 2.2.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
```

　これで、普通にコマンドとして`docker-compose`を実行できます。