モヒカンは正義

渋谷で働く怪しいWebエンジニアの備忘録

docker上でコンテナとしてdocker-composeを動かす

「dockerは動くがdocker-composeが動かない」というおもしろい環境のデバッグを手伝っていた際にdockerの公式ドキュメントを読んで、コンテナとしてdocker-composeを動かす方法が紹介されていて、とてもdockerっぽくて面白いなと思った。

f:id:pinkumohikan:20180904202052p:plain:w200

Docker Compose のインストール — Docker-docs-ja 17.06.Beta ドキュメント

仕組み

公式ドキュメントで紹介されている docker-composeのラッパースクリプト を読んでいくと、docker-composeのバイナリを積んだコンテナイメージが用意されていて、そのコンテナにdocker.sock渡して、コンテナ内からdocker-compose.yamlで指定されたコンテナを起動させているようだ。

そして、そのラッパーとなるshell scriptを /usr/local/bin/docker-compose へ置くことで、さもそのホストへdocker-composeコマンドがインストールされているかのように使うことができる。

懸念: コンテナへdocker.sockを渡して大丈夫か?

docker.sockを不用意にコンテナへ渡すとホストのrootを取られうるのでとても危険だが、docker公式が提供するイメージなのでその心配は無用だろう。

Dockerコンテナ内からホストマシンのルートを取る具体的な方法(あるいは/var/run/docker.sockを晒すことへの注意喚起) | 48JIGEN *Reloaded*

注意: ドキュメント通りのURLからrun.shをダウンロードすると、古い

公式日本語ドキュメントでは下記からrun.shをダウンロードするような紹介がされている

https://github.com/docker/compose/releases/download/1.6.2/run.sh

が、そのスクリプトで動くdocker-composeは1.6.2、つまり2016年2月頃のバージョンだ。 docker-composeには新しい機能がどんどん取り入れられているので、できる限り新しいバージョンを使ったほうが良い。

最新のrun.shはgithubからダウンロードできる。

Releases · docker/compose · GitHub

本日 (2018/9/4) 時点での最新版は 1.22.0。リリースノートは下記。

Release 1.22.0 · docker/compose · GitHub