Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】docker compose大全集

2025年09月22日に「Qiita」が公開したITニュース「docker compose大全集」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Docker Composeは、複数のコンテナで動くアプリケーションの環境をまとめて設定・管理するツールだ。この記事では、複雑な環境構築を簡単にするDocker Composeの主要な使い方やオプションを解説しており、システム開発の効率化に役立つ。

出典: docker compose大全集 | Qiita公開日:

ITニュース解説

現代のソフトウェア開発において、Dockerはアプリケーションの実行環境を効率的に管理するための基盤技術として広く利用されている。Dockerは、アプリケーションとその実行に必要なすべての要素(コード、ランタイム、システムツール、ライブラリなど)を「コンテナ」と呼ばれる独立したパッケージにまとめ、どこでも同じように動作する環境を提供する。これにより、「私の環境では動くのに」といった環境差異による問題を解消し、開発から本番環境まで一貫した運用を実現できる。

しかし、実際のアプリケーションは単一のコンテナだけで構成されることは稀である。多くの場合、Webサーバー、アプリケーションサーバー、データベース、キャッシュサーバーなど、複数のコンポーネントが連携して動作する。これらの複数のコンテナを手動で個別に起動・管理するのは手間がかかり、設定ミスも発生しやすい。そこで登場するのが、Docker Composeである。

Docker Composeは、複数のDockerコンテナで構成されるアプリケーションを定義し、一括で管理するためのツールだ。単一ホスト上で動かすアプリケーションのコンテナ群を、一つの設定ファイルでまとめて定義し、簡単なコマンドで起動、停止、状態確認といった操作ができるようになる。これにより、複雑なアプリケーション環境の構築と運用が大幅に簡素化される。

Docker Composeの核となるのは、「docker-compose.yml」というYAML形式の設定ファイルである。このファイルは、アプリケーションを構成する各サービスの「設計図」のようなものだと考えると良い。どのコンテナをどのように起動し、互いにどのように連携させるかを詳細に記述していく。

docker-compose.ymlファイル内で最も重要なセクションは、「services」である。このセクションには、アプリケーションを構成する個々のサービス(コンテナ)の定義を記述する。例えば、データベースサービス、Webアプリケーションサービスなど、それぞれのコンテナについて以下のような設定を行う。

まず、コンテナの元となるイメージを指定する方法が二つある。一つは「build」で、指定したディレクトリにあるDockerfileからDockerイメージを構築する場合に使う。もう一つは「image」で、Docker Hubなどのレジストリに公開されている既存のDockerイメージを使用する場合に使う。開発時にはbuildでカスタムイメージを作り、本番環境ではimageで最適化されたイメージを利用するといった使い分けが可能だ。

container_name」は、コンテナに人間が識別しやすい名前を付けるための設定である。これにより、コンテナを操作する際にIPアドレスや自動生成された長いIDではなく、分かりやすい名前で指定できるようになる。

ports」は、ホストOSとコンテナ間のポートマッピングを設定する。例えば、"8080:80"と設定すると、ホストOSの8080番ポートへのアクセスがコンテナの80番ポートに転送される。これにより、ホストOSからコンテナ内のWebサーバーなどにアクセスできるようになる。

volumes」は、コンテナが使用するデータを永続化したり、ホストOSとコンテナ間でファイルを共有したりするための設定だ。データベースのデータなどはコンテナが削除されると一緒に消えてしまうため、ボリュームとして永続化することで、データが失われるのを防ぐ。また、アプリケーションのソースコードをホストOSからコンテナにマウントすることで、コードを修正するたびにコンテナを再構築せずに開発を進められる。

environment」や「env_file」は、コンテナ内で利用する環境変数を設定する。データベースの接続情報やAPIキーなど、コンテナの動作に必要な設定値を渡す際に用いられる。env_fileを使えば、環境変数を別のファイルにまとめて管理できるため、機密情報をdocker-compose.ymlファイルに直接書かずに済む。

depends_on」は、サービス間の依存関係を定義する。例えば、Webアプリケーションサービスがデータベースサービスより先に起動しないように設定することで、データベースが利用可能になってからアプリケーションが起動するように順序を制御できる。

networks」は、サービス間の通信方法を定義する仮想ネットワークの設定である。デフォルトでもサービス間は通信できるが、カスタムネットワークを定義することで、より細かくアクセス制御を行ったり、ネットワーク名を分かりやすくしたりすることが可能になる。

その他にも、「restart」でコンテナが停止した際の再起動ポリシーを設定したり、「command」や「entrypoint」でコンテナ起動時に実行するコマンドを指定したりすることもできる。

servicesセクション以外に、トップレベルで「volumes」や「networks」セクションを定義することもできる。これにより、名前付きボリュームやカスタムネットワークをより詳細に設定し、複数のサービスで共有するといった柔軟な構成が可能になる。

docker-compose.ymlファイルを作成したら、あとはいくつかのコマンドでアプリケーション環境全体を操作できる。

docker compose up」コマンドは、docker-compose.ymlファイルに基づいて、すべてのサービスを起動する。通常はフォアグラウンドでログを表示しながら起動するが、「-d」オプションを付けることで、バックグラウンドで起動し、ターミナルを解放できる。

docker compose down」コマンドは、upで起動したサービスを停止し、関連するコンテナ、ネットワーク、そしてデフォルトで作成されたボリュームを削除する。開発を終える際や環境をクリーンにする際に利用する。

docker compose ps」コマンドは、現在docker-compose.ymlファイルで定義されているサービスの起動状態やポートマッピング、コンテナIDなどを一覧表示する。

docker compose logs」コマンドは、特定のサービスやすべてのサービスのコンテナが出力するログを表示する。アプリケーションのデバッグや動作確認に不可欠である。

docker compose exec [サービス名] [コマンド]」は、起動中の特定のコンテナ内で任意のコマンドを実行する際に使用する。例えば、データベースコンテナ内でSQLクライアントを起動したり、Webアプリケーションコンテナのシェルに入って内部を確認したりする際に便利だ。

docker compose build」コマンドは、docker-compose.ymlファイル内でbuildが指定されているサービスについて、DockerfileからDockerイメージを再構築する。アプリケーションのコードを変更し、新しいイメージを適用したい場合に利用する。

このように、Docker Composeは複数のコンテナで構成される複雑なアプリケーションの環境構築と管理を大幅に簡素化する強力なツールである。一つの設定ファイルでアプリケーション全体を定義し、数個のコマンドで起動・停止・管理ができるため、開発者は環境差異に悩まされることなく、アプリケーション開発に集中できる。システムエンジニアにとって、現代のアプリケーション開発において必須の知識と言えるだろう。

関連コンテンツ

関連IT用語