【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

この例では、webredisという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は、システムエンジニアを目指す初心者にとって、コンテナ技術を理解し、実践的なスキルを習得するための重要なツールだ。ぜひ積極的に活用して、アプリケーション開発の効率化を図ってほしい。

関連コンテンツ

【ITニュース解説】Episode 16: Docker Compose — Multi-Container Applications | いっしー@Webエンジニア