Docker Compose使い方:複数コンテナをまとめて管理するやり方を紹介

Docker Composeは、複数のコンテナをまとめて管理できる非常に強力なツールです。
これにより、開発・本番環境を問わず、システム全体を効率的に構築・運用できます。
今回は、Docker Composeの基本的な使い方と複数コンテナの連携を、初心者の方にもわかりやすくご紹介いたします。
公式ドキュメントもあわせてご参照ください:Docker公式Composeドキュメント
Docker Composeとは何か
Docker Composeは、複数のコンテナをまとめて定義し、操作できるツールです。
単体のコンテナ起動とは異なり、データベースやアプリケーションサーバーなど、関連するサービスをまとめて一括管理できることが最大の魅力です。
項目 | 内容 |
---|---|
使用ファイル | docker-compose.yml |
主なコマンド | docker-compose up , docker-compose down |
メリット | 複数コンテナの一括起動、設定管理、ネットワーク自動構築 |
インストール方法
Docker Desktopをインストールしている場合、Composeも一緒にインストールされています。
個別にインストールしたい場合は、以下を参考にしてください。
公式インストールガイド:Compose installation guide
基本的な構成ファイル:docker-compose.yml
Composeを使うには、まず docker-compose.yml
ファイルを作成する必要があります。
このファイルには、起動したいサービスごとの設定を記述します。
以下に最もシンプルな例を示します。
yamlversion: "3.9" # Composeファイルのバージョン指定
services:
web:
image: nginx:latest
ports:
- "8080:80"
この例では、Nginxの最新イメージを使って、ポート8080
でアクセスできるWebサーバーを起動しています。
Composeの基本コマンド
Docker Composeでは、以下のコマンドが基本になります。
コマンド | 内容 |
---|---|
docker-compose up | コンテナを起動(ビルドも自動で実施) |
docker-compose down | コンテナを停止して破棄 |
docker-compose ps | 実行中のサービス一覧を表示 |
docker-compose logs | サービスのログを確認 |
docker-compose build | イメージをビルド |
実際にコマンドを打つ例を見てみましょう。
bash# サービスを起動(バックグラウンドで実行)
docker-compose up -d
# コンテナを停止してネットワークなども破棄
docker-compose down
# 起動中サービスを一覧表示
docker-compose ps
複数サービスを定義する方法
実際のアプリケーションでは、Webサーバーとデータベースを同時に起動したいケースが多いです。
例えば、Nginx + MySQL の場合、次のように記述できます。
yamlversion: "3.9"
services:
web:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
この設定では、webサービスがdbサービスに依存して起動順が制御されます。
depends_on
の詳細は公式リファレンスをご覧ください:depends_on - Compose file reference
ネットワーク設定を理解する
Docker Composeでは、デフォルトで専用のネットワークが作成されます。
そのため、異なるサービス間でホスト名(サービス名)を使って通信できます。
例えば、上記の例ではwebからdbというホスト名でMySQLにアクセス可能です。
さらに、カスタムネットワークを明示的に定義することも可能です。
yamlversion: "3.9"
services:
web:
image: nginx
networks:
- mynetwork
db:
image: mysql
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
これにより、複数プロジェクト間でネットワークを分離管理できるようになります。
ボリューム設定を理解する
データをコンテナ削除後も保持したい場合は、ボリューム設定を活用します。
yamlversion: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
これで、データベースデータがホスト側に保存され、コンテナを消してもデータが消えません。
ボリュームの詳細はこちらをご参照ください:Docker volumes公式ドキュメント
環境変数を使った設定
Composeファイルでは、環境変数(.envファイル
) を使って設定値を管理できます。
例えば以下のように .env
ファイルを用意します。
iniMYSQL_ROOT_PASSWORD=mysecretpassword
そしてComposeファイル内では次のように参照できます。
yamlversion: "3.9"
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
これにより、設定値をファイル分離して管理できるので、セキュリティやメンテナンス性が向上します。
開発・本番環境を切り替える方法
通常、開発環境と本番環境では使用する設定が異なります。
Docker Composeでは、複数のComposeファイルを組み合わせて管理できます。
例えば次のようなファイル構成にすることが一般的です。
plaintextdocker-compose.yml # 共通設定
docker-compose.override.yml # 開発用設定
docker-compose.prod.yml # 本番用設定
開発用のdocker-compose.override.yml
は、docker-compose up
コマンド実行時に自動で読み込まれる仕様です。
一方、本番用設定を使う場合は、明示的にファイルを指定して起動します。
bashdocker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
ファイルを複数指定すると、後に指定したファイルが優先されます。
つまり、共通設定に対して本番用の上書きを行う流れになります。
参考リンク:複数Composeファイルの活用方法
サービスを柔軟に制御するprofiles機能
Compose v3.9以降では、profilesという機能も追加されています。
これは、起動するサービスをプロファイル単位で制御できる機能です。
たとえば、開発時だけ使うモックサーバーなどをプロファイルに分けられます。
yamlversion: "3.9"
services:
web:
image: nginx
mock-server:
image: my-mock-server
profiles:
- dev
起動時に以下のように指定できます。
bashdocker-compose --profile dev up
これにより、本番環境には不要なサービスを簡単に除外できるようになります。
公式ドキュメントもぜひご参照ください:profiles機能について
コンテナの正常性をチェックするhealthcheck
運用面で非常に重要なのが、コンテナのヘルスチェック機能です。
サービスが正しく動いているかをチェックし、異常時にはリトライ処理などに活かせます。
設定例は以下の通りです。
yamlversion: "3.9"
services:
db:
image: mysql:5.7
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 5
この設定では、30秒ごとにMySQLへの接続確認を行い、5回失敗したら異常と判定します。
コンテナのヘルスチェック詳細:Docker Healthcheckガイド
サービス間で環境変数を共有する方法
複数コンテナ間で共通設定を持たせたい場合は、環境変数を共有できます。
env_file
を使う方法が簡単です。
yamlversion: "3.9"
services:
web:
image: nginx
env_file:
- ./common.env
api:
image: node
env_file:
- ./common.env
この例では、common.env
ファイルの内容が、両方のサービスに適用されます。
サービス間で設定を統一できるため、環境構築ミスを防ぎやすくなります。
ビルド用DockerfileをComposeから直接指定する
アプリケーションを独自ビルドしたい場合、Composeから直接Dockerfileを指定することも可能です。
yamlversion: "3.9"
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
この設定では、プロジェクトルートにあるDockerfile.dev
を使ってイメージをビルドし、その上でコンテナを起動します。
contextとdockerfileの使い方:Compose buildオプション
実際の運用パターン例
ここでは、開発・本番両方で運用する具体例をご紹介します。
1. 開発環境
bashdocker-compose up -d
- overrideファイルでボリュームマウント
- ホットリロード対応(Node.jsなど)
2. 本番環境
bashdocker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
- 本番ビルドイメージ使用
- ボリュームマウント無し
- キャッシュ戦略最適化
よくあるトラブルと対策
Docker Composeを使っていると、いくつか典型的なトラブルに遭遇することもあります。
問題 | 原因 | 解決策 |
---|---|---|
コンテナが起動しない | depends_onだけではサービスの起動完了は保証しない | healthcheckを設定してリトライ設計にする |
ネットワークで通信できない | サービス名を間違えている | services間ではサービス名がホスト名となる |
環境変数が反映されない | .envファイルの位置・記述ミス | ファイルの位置とフォーマットを再確認 |
まとめ
Docker Composeは、複数のコンテナをまとめて定義・操作できるツールであり、開発・運用において非常に大きな効果を発揮いたします。
この記事では、基本的な使い方から、応用的な活用方法まで幅広くご紹介してまいりました。
ポイントを振り返ってみましょう。
カテゴリ | 内容 |
---|---|
基本操作 | docker-compose.yml で複数サービスを管理、up とdown で起動停止 |
ネットワーク・ボリューム管理 | 自動生成されるネットワーク、データ永続化のためのボリューム活用 |
環境変数管理 | .env ファイルやenv_file で設定値の外部化 |
複数環境対応 | 開発用・本番用のComposeファイルを切り替えて管理 |
profiles機能 | 必要なサービスだけを選択的に起動できる柔軟性 |
healthcheck機能 | コンテナの正常性をチェックし、堅牢な運用を実現 |
カスタムビルド | 独自Dockerfileによるイメージ作成とCompose連携 |
トラブル対策 | 通信不良や環境設定ミスへの基本的な対応法 |
Composeの導入により、一貫性のある環境構築と運用効率の劇的な向上が期待できます。
また、開発だけでなく、本番環境でも活用できる点は大きな強みであり、特にチーム開発・CI/CDパイプラインと相性が良い点も魅力です。
これからDocker Composeを使い始める方は、まず小さなプロジェクトで練習し、次第にサービス数を増やしていくと、自然と使いこなせるようになります。
さらに詳しい情報は、以下の公式リンクも活用しながら、ぜひ実際に手を動かして学んでみてください。
Docker Composeを味方につければ、開発も運用も、もっと自由に、もっと強くなります。
皆様のDockerライフが素晴らしいものになることを心より願っております!
記事Article
もっと見る- article
Dockerfileの基本構文の紹介!Dockerfile内でよく使う命令まとめ!
- article
React Suspenseを使う際に避けたいアンチパターン5選と解決策について紹介
- article
React SuspenseとServer Componentsの融合:クライアントとサーバの役割分担
- article
Suspense + useTransitionで滑らかなUXを実現するやり方を紹介
- article
React Suspenseでデータフェッチ!fetchでは動かない理由と正しい書き方について紹介
- article
React 18のSuspense完全対応ガイド:並列レンダリング時代の新常識