docker-compose を Docker 内で実行するメモ。
背景
docker-compose は便利なツールだが、Linux サーバー上で動かすときは入れ方に悩む。
Docker engine は Docker 公式 apt リポジトリから入れることができるけど、docker-compose はレポジトリには存在しない。
公式ドキュメント では curl でインストールする方法が書いてある。一度インストールする分にはこれで良いものの、更新を考えるとイマイチ。
また、Debian や Ubuntu の公式リポジトリには docker-compose パッケージが存在しているけど、新しくなかったりする。
そこで、docker-compose の Docker image を使って動かしてみる。
やり方
公式ドキュメント の "Alternative install options" にはラッパー(run.sh
)を使ったやり方が書いてあり、 run.sh
を /usr/local/bin/docker-compose
に置くよう案内している。
ただ、できれば docker コマンドのみでシンプルにやりたい。
run.sh を使わずにやる
run.sh はそこまで特殊なことはしておらず、
- Docker UNIX socket の mount
- ホスト側の Working directory の mount
- コンテナの Working directory をホスト側と同じに
- ホスト側の Home directory の mount
- 環境変数の維持
などを行いつつ docker/compose image を起動している(詳細は run.sh のコメント参照)*1。
多くの場合*2は、1-3 があれば十分なはず。これをふまえて、docker コマンドで docker-compose を最小限使うには↓のコマンドになる:
$ docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v `pwd`:`pwd` -w `pwd` docker/compose:{version} --help Define and run multi-container applications with Docker. Usage: docker-compose [-f <arg>...] [--profile <name>...] [options] [--] [COMMAND] [ARGS...] docker-compose -h|--help Options: ...
これで、docker-compose をダウンロードしなくても Docker があれば compose を立ち上げることができる。