複数コンテナを使ったアプリケーション開発や運用を考えているなら、Docker Composeは非常に強力なツールです。設定ファイルで複数のサービスやネットワーク、ボリュームなどを定義し、コマンド一発で起動・停止・削除・ログ確認までできます。この記事ではDocker Compose 使い方を初心者にもわかりやすく、実例を交えて最新情報を盛り込みながら詳しく解説します。
目次
Docker compose 使い方の基本とは何か
まずは「Docker compose 使い方」の基本概念を押さえておきます。Docker Composeは、**複数コンテナ**で構成するアプリケーション全体を**簡単に管理**するためのツールです。YAML形式のComposeファイルにサービスやネットワーク、ボリュームを定義し、コマンド一つで立ち上げたり停止したりできます。
開発環境やテスト環境、本番環境での再現性が非常に高く、プロジェクトチーム全体で環境を共有しやすくなります。
過去のフォーマット(バージョン1)から進化し、現在はCompose仕様に基づく最新形式(バージョン2以降)が主流となっています。
Composeとは何か
Composeとは、複数のDockerコンテナ(サービス)をまとめて定義・実行するためのツールです。各サービスはComposeファイルで指定されたイメージかDockerfileから構築され、それぞれ別々のコンテナで動作します。これにより、例えDB、Webサーバ、キャッシュサーバなどを異なるコンテナで扱っても一つのアプリケーションスタックとして一貫管理できます。最新のCompose仕様では、サービス間のネットワークやボリュームの定義、環境変数の扱いなどが標準化されています。
Composeファイルの構造とバージョン
ComposeファイルはYAML形式で記述し、先頭でスキーマのバージョンを指定します。バージョン2以降ではサービス、ネットワーク、ボリュームの定義が可能となり、より細かく構成を制御できます。バージョン1は古く、ネットワークやボリュームの扱いに制限があります。Composeファイル内の `services` キーの下に各サービスを記述し、必要なら `build`, `image`, `ports`, `environment` 等の設定を含めます。形式や利用可能なキーはバージョンにより異なりますので最新版を参照することが望ましいです。
主要なコマンドとライフサイクル
Composeを使用する際によく使われるコマンドには次のようなものがあります。起動は `docker compose up`、停止と削除は `docker compose down`、ログ確認は `docker compose logs`、稼働中のコンテナ状況は `docker compose ps` などです。また、イメージを事前に取得する `pull`、サービス数を増減させる `scale` なども利用されます。これらコマンドによって複数コンテナのライフサイクルを一元的に管理できます。
環境構築と導入ステップ
Docker Compose 使い方として、まずは環境構築と導入の手順を理解することが重要です。この段階をきちんと踏むことで、後で問題となる依存関係や設定の不整合を防げます。以下に具体的なステップを示しますので、それぞれ丁寧に設定しましょう。
インストール方法
WindowsやmacOSでDocker Desktopを利用していれば、Composeはすでに含まれていることが多いです。LinuxではCompose CLIプラグインとして別途インストールが必要な場合があります。インストール後にはバージョン確認を行い、求めるCompose仕様(バージョン2以降)が正しく動作するかチェックしておくと安心です。
プロジェクト構成の準備
プロジェクトルートにComposeファイル(通常 `docker-compose.yml` または `compose.yaml`)を置き、サービスごとにサブディレクトリを用意すると構成が整理しやすくなります。Dockerfileを各サービスに用意し、共通のネットワークやボリュームを定義できるようにすることが推奨されます。また環境変数を `.env` ファイルで管理すると開発・本番での切り替えがスムーズになります。
Composeファイルの記述例
Webアプリケーション+データベース+キャッシュという三つのサービス構成を例にComposeファイルを記述する方法を示します。
サービス名、イメージかビルド設定、ポートマッピング、環境変数、ボリューム、ネットワークなどを含めます。
この段階では実際にどのサービスがどのポートを使うか、データ永続化にボリュームを使うか等を決めておくと運用時に困りにくいです。
実践的な操作とTips
実際にDocker Composeを使い始めた後の操作方法や便利な機能、注意点などを具体的に学びます。複数コンテナの管理が簡単になるような工夫も含め、効率的に操作できる方法を紹介します。
起動・停止・再起動の手順
Composeファイルが準備できたら、まず `docker compose up` を使って起動します。バックグラウンドで動かすなら `-d` オプションを付けます。停止は `docker compose stop` で一時停止、完全に削除する場合は `docker compose down` を使います。再起動が必要な場合は `restart` コマンドを使うか、設定変更後に `down`→`up` を実行します。サービス間の依存関係がある場合に順序を考慮すると問題が少なくなります。
ネットワークと通信の設定
Composeではデフォルトで1つのネットワークが作成され、各サービス間はサービス名で通信可能になります。もし複数のプロジェクト間で通信させたい場合や外部ネットワークを使いたい場合は、`networks` キーを使って明示的に指定できます。内部ネットワーク・共有ネットワーク・外部ネットワークの用途によって設定を分けるとセキュリティや可読性が向上します。
ボリュームとデータ永続化の管理
サービスのデータを永続化させるためにComposeファイルで `volumes` を定義します。データベースなどの永続化が必要なサービスにはホストのディレクトリマッピングや名前付きボリュームを使うと良いです。またボリュームを取り扱う際はファイル所有者やパーミッションの設定をきちんと確認し、環境差異による権限トラブルを防ぐことが大切です。
高度な使い方と運用上のベストプラクティス
基本操作を習得したら、Docker Compose 使い方をさらに伸ばすための高度なテクニックや運用の工夫について説明します。複数プロジェクトでの管理、CI/CDとの連携、本番運用に向けた設定などが含まれます。
複数Composeファイルとプロファイルの活用
異なる環境(開発・テスト・本番)で異なる設定を使いたい場合、複数のComposeファイルを用いて上書き構成を作る方法が標準です。コマンドラインで `-f` を複数指定することでベース設定と環境別設定をマージ可能です。さらにプロファイル機能を使えば、特定のサービスを有効無効にしたり、環境毎の共通・差分設定を整理しやすくなります。
CI/CDとの統合
ComposeをCI/CDパイプラインに組み込むことで、テスト環境の構築、結合テスト、統合テスト、本番へのデプロイ前検証などを自動化できます。パイプライン中でComposeファイルをチェックアウトし、依存するサービスを仮想的に立ち上げてテストを実行する流れが一般的です。これにより手動操作ミスの削減や環境一致性の確保が可能になります。
本番運用での注意点とパフォーマンス最適化
本番運用ではログの管理、メモリやCPUリソース制限、再起動ポリシーの設定などが重要です。Composeファイルで `restart` ポリシーを指定し、異常時の復旧を自動化できます。イメージのサイズが大きすぎるサービスは起動時や更新時に時間がかかるため、軽量化を心がけます。またネットワークポリシーやセキュリティの観点から、外部アクセスを公開するサービスと内部のみで通信するサービスを分離して配置することが望ましいです。
例で学ぶ:実際に構築するWeb+DB環境
ここからは具体的な構成を例として、Docker Compose を使ってWebアプリケーションとデータベースを連携させる手順を追います。実践例を通じて理解を深めることで、Docker compose 使い方を確実に自分のものにできます。
構成概要と目的
対象はWebアプリケーション(例Webサーバ)とデータベースの2つのサービスです。開発環境でこの構成を使えるようにし、データの永続性を確保し、ログが追えるようにしておきます。ネットワークは内部通信のみ、外部公開はWebサービスのみとします。こうした構成でComposeを使う目的は、環境の再現性と管理のしやすさ、依存関係の可視化です。
Composeファイル例解説
Composeファイル例として以下のような内容を記述します。
– Webサービス:Dockerfileからビルドし、ポート公開と環境変数設定あり。
– DBサービス:公式のデータベースイメージを使い、データ永続化のためのボリューム設定あり。
– ネットワーク:内部通信用ネットワークを定義し、サービス間通信を限定。
この例を基に自分のアプリに合わせてサービスを増やしたり構成を変えたりできます。
操作例:起動・ログ確認・シャットダウン
具体的な操作手順は次の通りです。まずプロジェクトディレクトリで `docker compose up -d` を実行しバックグラウンドで起動します。次に `docker compose logs -f web` などでWebのログを追います。停止は `docker compose down` を使い、必要に応じて `-v` を付けてボリュームも削除します。構成変更があれば、再起動や再構築が必要となる場合がありますが、Composeが変更を検知して古いコンテナを置き換えてくれます。
トラブルシューティングとよくある失敗例
Docker Compose 使い方では、始めはうまくいかないこともあります。こうした失敗例を知っておくと問題解決が早くなります。ここでは代表的なトラブルとその対処法を紹介します。
バージョンの不一致問題
Composeファイルのバージョン指定がDocker EngineやComposeのCLIのサポート範囲外だと、キーが認識されなかったり動作がおかしくなったりします。バージョン2以降に統一し、Composeのバージョンを確認してからファイルを書くことが重要です。古いCompose CLIと新しいCompose仕様の組み合わせなどにも注意が必要です。
ポート衝突と外部公開の設定ミス
複数サービスでホスト側ポートを同じ番号に設定すると起動時に競合が起きます。Composeファイルの `ports` 設定を確認し、必要に応じてポート番号を変更するか、 `127.0.0.1` バインディングや公開ポートを制限する設定をすることが対策になります。外部からのアクセスはWebサービスのみに限定し、他は内部ネットワークのみに属するよう設定を分けると安全です。
永続化データの消失リスク
ボリュームやホストマッピングでデータを永続化できるよう設定することが基本ですが、Compose down時にボリュームを削除してしまうオプションを誤って使うとデータが消えます。データベースなど重要データには名前付きボリュームを使い、Compose down コマンドのオプションを慎重に扱うことが望ましいです。
まとめ
Docker Compose 使い方をマスターすると、複数コンテナのアプリケーションを非常に効率よく開発・運用できるようになります。Composeファイルのバージョン選定、サービス定義、ネットワーク・ボリューム設定、起動・停止操作などの基本から始めて、複数設定ファイルやプロファイル、CI/CD統合、本番運用での注意点まで順を追って学ぶことで組織内でも活用しやすくなります。
実例での構築やトラブル例の知識を持っておければ問題発生時にも落ち着いて対処可能です。
この記事で得た知識をもとに、ご自身のプロジェクト環境でDocker Composeを使いこなしてみて下さい。
コメント