Dockerizeを使ってDocker Composeのコンテナの起動順を制御する

概要

Dockerizeを使ってDocker Composeで起動するコンテナの順番を制御する方法についての覚え書き。

github.com - jwilder/dockerize

なぜDockerizeを使うのか

Dockerizeではなく、wait-for-it というピュアなbash scriptを使った方法も採用することもできる。

cf. Docker-docs-ja - Compose の起動順番を制御

Dockerizeを使う目的は複数コンテナを起動する際、コンテナの起動順を意図的に制御したいようなときである。

例えば、アプリケーション用のコンテナとテスト用のデータベースコンテナがあったとして、アプリケーション側のコンテナがDBを使用したテストを行うようなとき、データベースのコンテナがアプリケーションのコンテナよりも先に起動されている必要がある。

要は、コンテナ間の起動順の依存関係を解決するような目的であるかと思う。

docker-composeにはdepends_onlinksといったオプションがあるが、depends_onはコンテナの作成順序を、linksdepends_onの機能に加えてコンテナ間の名前解決を行うもので、どちらも起動の順番はまでは制御しない。

後で知ったがlinksはversion2以降では自動的に実行されるらしく、レガシーになったらしい。

Example

筆者の某アプリを実例にあげておく。

docker-compose.yml

gobel_appコンテナはgobel_test_dbの起動を待ちたい。 entrypointにはdockerizeのコマンドを指定している。

gobel_appコンテナのビルドに使用しているDockerfile。

dockerizeのインストールを含めるようになっている。

所感

手軽に導入できる。 wait-for-itのようなスクリプトを自前で用意しても良さそうな気がするがコンテナ管理が複雑化することを見込んでこうしたdockerizeを入れておくのはありかなと思った。