Docker超入門:複数コンテナの起動順を管理する!depends_onとconditionの設定方法

 Docker Composeを使うと、複数のコンテナを一括で管理できますが、**「どのコンテナを先に起動するか」**を意識しないと、うまく動作しないことがあります。
特に、データベース(DB)とアプリケーション(WordPressなど) のように「依存関係」がある場合、起動順序の管理がとても大切です。

この記事では、Docker Composeでコンテナの起動順を制御するための
 depends_oncondition、さらに healthcheck の使い方を、例と図を交えてわかりやすく解説します!

depends_on とは?

 depends_on は、あるコンテナが他のコンテナに依存していることをDocker Composeに伝えるためのディレクティブです。
これを使うことで、起動順序の制御ができます。

定義の基本

services:
  app:
    depends_on:
      - db

この例では、「app」サービスが「db」サービスに依存しています。
つまり、dbコンテナが先に起動し、その後appコンテナが起動します。

depends_on の限界

ただし、ここで重要な注意点があります。
 depends_onは「起動順序」を制御しますが、依存するサービスが“完全に起動し終わる”まで待ってくれるわけではありません

 つまり、MariaDBコンテナが「起動済み」にはなっても、「接続可能」になる前にWordPressコンテナが動こうとして失敗することがあります。
この問題を解決するのが、healthcheckcondition の組み合わせです。

healthcheck とは?

healthcheck は、コンテナが“健康(正常動作中)”かどうかを定期的に確認する機能です。
 たとえば「MariaDBが本当に接続できる状態か」「WebサーバーがHTTP応答を返すか」などを監視します。

healthcheckの書式

項目説明
test実行するコマンドを指定(例:mysqladmin ping
intervalチェック間隔(例:10s)
retries再試行回数(例:5)
timeoutタイムアウト時間(省略可能)

定義例(MariaDB)

healthcheck:
  test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  interval: 10s
  retries: 5

 この設定では、MariaDBがlocalhostで正常応答するかを10秒ごとにチェックし、最大5回リトライします。

condition とは?

 condition は、depends_onに付け加えるオプションで、依存先のコンテナがどの状態になったら起動を続行するかを指定します。

conditionで指定できる主な値

説明
service_started依存するサービスが起動したらすぐ次を起動
service_healthy依存するサービスのhealthcheckが成功するまで待機してから起動

 特に service_healthy を使うと、DBが完全に起動してからアプリを立ち上げる ことができるため、実用的な環境ではほぼ必須です。

具体例:WordPressとMariaDBの連携構成

では実際に、WordPressとMariaDBの2つのコンテナを使って「起動順を管理」してみましょう。

services:
  db:
    image: mariadb
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      retries: 5
    ports:
      - "3306:3306"

  wordpress:
    image: wordpress
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "-", "http://localhost:80"]
      interval: 10s
      retries: 5
    ports:
      - "80:80"

定義のポイント解説

項目説明
dbサービスMariaDBのコンテナ。healthcheckで起動確認。
wordpressサービスdbに依存。dbのhealthcheckが成功するまで起動を待機。
depends_on → condition: service_healthyMariaDBが「健康状態」と判定されてからWordPressを起動。

この設定により、WordPressはMariaDBが完全に起動してから動作を開始するようになります。
これで、「DB接続エラーでWordPressが落ちる」といったトラブルを防げます。

コマンドの解説

コンテナを起動する際は、いつもどおり以下のコマンドを実行します。

docker compose up -d
コマンド説明
docker compose upcompose.yamlに定義された全サービスを起動
-dバックグラウンドで実行(デタッチドモード)

このとき、Docker Composeは「db → wordpress」の順で起動を開始します。
dbのhealthcheckがOKになるまでは、wordpressコンテナの起動を保留します。

動作確認の流れ

  1. MariaDBコンテナが起動(Healthcheckで接続確認)
  2. MariaDBが正常動作を報告(Healthy)
  3. WordPressコンテナが起動開始
  4. ブラウザで http://localhost にアクセス
    → WordPress初期設定画面が表示される!

これで、2つのコンテナが連携して正常に動作していることが確認できます。

イラストで理解する:depends_onとconditionの関係

まとめ

  • depends_on:コンテナの起動順を制御
  • condition:依存先の状態を条件付きで待機できる
  • healthcheck:コンテナの「健康状態」を確認して安定稼働を保証
  • service_healthy を組み合わせると、アプリが安定して動作

複数コンテナの連携では、単に順番を決めるだけでなく、「いつ動かすか」も重要です。
depends_onとconditionを使いこなして、信頼性の高いCompose構成を作っていきましょう! 🚀