【ITニュース解説】Episode 16: Docker Compose — Multi-Container Applications
2025年09月07日に「Dev.to」が公開したITニュース「Episode 16: Docker Compose — Multi-Container Applications」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
Docker Composeは、複数のDockerコンテナで構成されるアプリケーションを、一つのYAMLファイルでまとめて管理・実行するツールだ。複雑なWebサービスなど、各コンテナの起動・連携・設定(ネットワーク、永続データ)を一括で制御でき、開発環境の構築を効率化する。
ITニュース解説
Docker Composeは、複数のコンテナで構成されるアプリケーションを効率的に管理するためのツールだ。従来のDockerでは、各コンテナを手動で起動し、連携させる必要があったが、アプリケーションが複雑になるにつれて、この作業は煩雑になる。Docker Composeを使うことで、これらのコンテナを一つの設定ファイルに定義し、一括で起動・停止できるようになる。
Docker Composeの主な利点は、複数コンテナの管理が容易になること、ネットワークやボリュームといった設定を一元的に管理できること、そして、チーム全体で一貫した環境を構築できることだ。docker-compose upという一つのコマンドで、アプリケーション全体を起動できる手軽さも魅力だ。
Docker Composeを使うには、まずDockerがインストールされている必要がある。最近のDocker Desktopには、Docker Composeが標準で含まれていることが多い。インストールされているかどうかは、ターミナルでdocker compose versionと入力して確認できる。もしインストールされていない場合は、Dockerの公式サイトを参照してインストールしよう。
Docker Composeの設定は、docker-compose.ymlというYAMLファイルに記述する。このファイルで、アプリケーションに必要なサービス(コンテナ)を定義し、それぞれのコンテナの設定、依存関係、ネットワークなどを記述する。
簡単な例として、Flask(Python)で作成されたWebアプリケーションとRedisで構成されるアプリケーションを考えてみよう。docker-compose.ymlファイルは以下のようになる。
1version: '3' 2services: 3 web: 4 build: ./app 5 ports: 6 - "5000:5000" 7 depends_on: 8 - redis 9 10 redis: 11 image: redis:alpine
この例では、webとredisという2つのサービスが定義されている。webサービスは、./appディレクトリにあるDockerfileを使ってビルドされる。portsセクションでは、ホストマシンのポート5000番をコンテナのポート5000番にマッピングしている。depends_onセクションは、webサービスがredisサービスに依存していることを示しており、redisサービスが起動してからwebサービスが起動する。redisサービスは、Docker Hubからredis:alpineイメージをダウンロードして使用する。
この設定ファイルがあるディレクトリでdocker compose upコマンドを実行すると、Docker Composeはwebサービスとredisサービスを起動する。アプリケーションにアクセスするには、Webブラウザでlocalhost:5000にアクセスする。コンテナを停止するには、docker compose downコマンドを実行する。
Docker Composeでは、ボリュームを定義して、コンテナのデータが永続化されるようにすることもできる。ボリュームは、コンテナが停止または削除されても、データが失われないようにするために使用される。例えば、データベースのデータをボリュームに保存することで、コンテナを再起動してもデータが保持される。docker-compose.ymlファイルでボリュームを定義するには、以下のように記述する。
1version: '3' 2services: 3 db: 4 image: postgres:alpine 5 volumes: 6 - db_data:/var/lib/postgresql/data 7 8volumes: 9 db_data:
この例では、db_dataという名前のボリュームが定義され、PostgreSQLコンテナの/var/lib/postgresql/dataディレクトリにマウントされている。これにより、データベースのデータはdb_dataボリュームに保存され、コンテナが再起動されてもデータが失われない。
実際のアプリケーションでは、フロントエンド(React/Next.js)、バックエンド(Node.js, Django, Flaskなど)、データベース(Postgres, MongoDB, MySQL)、キャッシュ(Redis)など、複数のサービスが連携して動作することが多い。これらのサービスをDocker Composeで定義することで、アプリケーション全体を簡単に管理できる。
Docker Composeで使用できる主なコマンドは以下の通りだ。
docker compose up -d: バックグラウンドでコンテナを起動する。docker compose down: コンテナを停止して削除する。docker compose logs -f: コンテナのログを表示する。docker compose ps: 実行中のサービスを一覧表示する。
Docker Composeを使用する際のベストプラクティスとしては、環境変数ファイル(.env)を使用してシークレット情報を管理すること、サービスをモジュール化すること(DB、キャッシュなどを分離する)、ボリュームを使用して永続的なデータを保存すること、そして、docker-compose.ymlファイルに認証情報をハードコーディングしないことなどが挙げられる。
Docker Composeは、システムエンジニアを目指す初心者にとって、コンテナ技術を理解し、実践的なスキルを習得するための重要なツールだ。ぜひ積極的に活用して、アプリケーション開発の効率化を図ってほしい。