Unyablog.

のにれんのブログ

docker-compose を Docker で動かす

docker-compose を Docker 内で実行するメモ。

背景

docker-compose は便利なツールだが、Linux サーバー上で動かすときは入れ方に悩む。

Docker engine は Docker 公式 apt リポジトリから入れることができるけど、docker-compose はレポジトリには存在しない。

公式ドキュメント では curl でインストールする方法が書いてある。一度インストールする分にはこれで良いものの、更新を考えるとイマイチ。

また、DebianUbuntu の公式リポジトリには docker-compose パッケージが存在しているけど、新しくなかったりする。

そこで、docker-compose の Docker image を使って動かしてみる。

やり方

公式ドキュメント の "Alternative install options" にはラッパー(run.sh)を使ったやり方が書いてあり、 run.sh/usr/local/bin/docker-compose に置くよう案内している。

github.com

ただ、できれば docker コマンドのみでシンプルにやりたい。

run.sh を使わずにやる

run.sh はそこまで特殊なことはしておらず、

  1. Docker UNIX socket の mount
  2. ホスト側の Working directory の mount
  3. コンテナの Working directory をホスト側と同じに
  4. ホスト側の Home directory の mount
  5. 環境変数の維持

などを行いつつ 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 を立ち上げることができる。

*1:Volume などで Working directory 外からの参照がいるのであれば自分でフラグを追加してねというスタンス

*2:混み入ったことをせず、環境変数や Home directory 配下の config なども使わない場合