Edited at

Raspberry Pi用docker-composeの構築


Raspberry Pi用docker-composeの構築

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

このページを書いてから1年半ほど経過して、docker-compose も今の (2018/12/07現在) バージョンは 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のリポジトリを使用すればdocker-composeを使えるのですが現在(2017/04/22)のバージョンは 1.9.0 となっています。

 そこで、github.comにあるdocker公式リポジトリから構築してみることにします。ただし、dockerコンテナとして作成していますので起動には時間がかかっています。

 正しい構築方法をyagitechさんのページで教えてもらいましたので、修正追加させてもらいます。ちゃんとdocker-composeのバイナリを作成しています。


2. githubからソースを取得

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

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


3. docker buildコマンドの実行

 取得したリポジトリにあるDockerfile.armhfを使用してビルドします。

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

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


4. dockerコンテナの実行

 できあがったコンテナを実行してみます。

$ 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さんのページで教えていただいた方法です。元々は、Getting docker-compose on Raspberry Pi (ARM) the easy way (updated)を参照しているそうです。

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ディレクトリにコピーします。

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

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

$ 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を実行できます。