概要
Dockerizeを使ってDocker Composeで起動するコンテナの順番を制御する方法についての覚え書き。
github.com - jwilder/dockerize
なぜDockerizeを使うのか
Dockerizeではなく、wait-for-it というピュアなbash scriptを使った方法も採用することもできる。
cf. Docker-docs-ja - Compose の起動順番を制御
Dockerizeを使う目的は複数コンテナを起動する際、コンテナの起動順を意図的に制御したいようなときである。
例えば、アプリケーション用のコンテナとテスト用のデータベースコンテナがあったとして、アプリケーション側のコンテナがDBを使用したテストを行うようなとき、データベースのコンテナがアプリケーションのコンテナよりも先に起動されている必要がある。
要は、コンテナ間の起動順の依存関係を解決するような目的であるかと思う。
docker-composeにはdepends_onやlinksといったオプションがあるが、depends_onはコンテナの作成順序を、linksはdepends_onの機能に加えてコンテナ間の名前解決を行うもので、どちらも起動の順番はまでは制御しない。
後で知ったがlinksはversion2以降では自動的に実行されるらしく、レガシーになったらしい。
Example
筆者の某アプリを実例にあげておく。
docker-compose.yml
gobel_appコンテナはgobel_test_dbの起動を待ちたい。 entrypointにはdockerizeのコマンドを指定している。
gobel_appコンテナのビルドに使用しているDockerfile。
dockerizeのインストールを含めるようになっている。
所感
手軽に導入できる。 wait-for-itのようなスクリプトを自前で用意しても良さそうな気がするがコンテナ管理が複雑化することを見込んでこうしたdockerizeを入れておくのはありかなと思った。