2026年9月25日
2026年9月25日
Docker Composeのdepends_onで起動順序を制御する方法
はじめに
Docker Composeは、複数のコンテナを一括で管理するためのツールです。特にWebアプリケーションやサービスアーキテクチャでは、データベースなどの前提条件が整備されていることを確認してから、ウェブサーバーやアプリケーションサーバーを起動することが重要です。depends_onオプションを利用して、指定したコンテナが正常に起動した後に他のコンテナを起動させることができます。
症状・背景
- データベースの初期化スクリプトが実行される前にウェブサーバーが起動し、データベース接続エラーが発生する。
- ウェブアプリケーションのコンテナが正常に起動する前にデータベースへの接続試行が行われる。
- 一連のステージング環境や開発環境での依存関係管理。
手順・設定方法
ステップ1: docker-compose.ymlファイルの作成と編集
# Docker Compose用のdocker-compose.ymlファイルを作成します。
vi docker-compose.yml
ステップ2: depends_onを使用して起動順序を制御
# サーバーコンテナの定義
version: '3.8'
services:
db:
image: postgres:13
environment:
POSTGRES_DB: example_db
POSTGRES_USER: example_user
POSTGRES_PASSWORD: example_password
web:
build: .
depends_on:
- db
environment:
DATABASE_HOST: db
DATABASE_NAME: example_db
ステップ3: サービス間のネットワーク接続設定
# コンテナ間のネットワーク接続を指定します。
version: '3.8'
services:
db:
image: postgres:13
networks:
- my_network
web:
build: .
depends_on:
- db
environment:
DATABASE_HOST: db
DATABASE_NAME: example_db
networks:
- my_network
networks:
my_network:
ステップ4: コンテナを起動
# Docker Composeでサービスを起動します。
docker-compose up -d
注意事項
depends_onは依存関係のためだけのものであり、必ずしもサービスが正常に起動したことを意味するわけではありません。健康チェックが必要な場合は、healthcheckオプションを利用することをおすすめします。- サービス間のネットワーク接続設定が適切に行われていないと、依存関係が正しく動作しないことがあります。
depends_onを使用すると、コンテナの起動順序が明確になる一方で、すべてのコンテナが一度に起動するわけではありません。これはサービスを個別に管理できる利点でもあります。
まとめ
1. depends_on: サービス間の依存関係を制御します。
2. ネットワーク接続設定: コンテナ間で必要な通信が可能になります。
3. コンテナ起動: Docker Composeを使用して一連のサービスを管理し、順序立てて起動できます。
4. 注意点: depends_onは単なる依存関係の定義に過ぎず、健康チェックが必要な場合はそれに注意してください。
関連記事: