【初心者向け】Docker Compose の使い方|基本から実践まで丁寧に解説

kento_morota 20分で読めます

Docker Composeとは?複数コンテナを簡単に管理できるツール

「Dockerは聞いたことがあるけど設定が複雑そう…」「開発環境の構築に時間がかかって本来の業務に集中できない」そんな悩みを抱えていませんか?

Docker Composeは、複数のDockerコンテナを一つの設定ファイルで管理できるツールです。従来は一つひとつのコンテナを個別に起動・設定する必要がありましたが、Docker Composeを使えば、たった一つのコマンドで複数のコンテナを同時に起動・停止できます。

中小企業のIT担当者にとって、Docker Composeは「属人化を防ぎ、誰でも同じ開発環境を再現できる」という大きなメリットがあります。設定ファイルを共有するだけで、新しいメンバーも即座に同じ環境で作業を始められるため、引き継ぎや新人教育の負担を大幅に軽減できます。

通常のDockerとの違い

通常のDockerでは、コンテナを一つずつ起動する必要があります。例えば、WebアプリケーションとデータベースとRedisを使う場合、3つのコンテナをそれぞれ個別に起動し、ネットワーク設定も手動で行わなければなりません。

# 通常のDockerでの起動例
docker network create myapp-network
docker run -d --name db --network myapp-network mysql:8.0
docker run -d --name redis --network myapp-network redis:alpine
docker run -d --name web --network myapp-network -p 80:80 myapp:latest

一方、Docker Composeの場合は、一つの設定ファイルにすべての情報を記載し、一つのコマンドで起動できます。

# Docker Composeでの起動
docker-compose up -d

設定はdocker-compose.ymlファイルに記述されているため、コマンドを覚える必要がなく、設定の変更も簡単です。また、依存関係の管理も自動化されます。「データベースが起動してからWebアプリを起動する」といった順序制御も、設定ファイルで指定できます。

Docker Composeが解決する課題

Docker Composeは、中小企業が抱える以下のような課題を解決します。

環境構築の属人化問題を解消できます。設定ファイル(docker-compose.yml)に環境の情報がすべて記載されているため、「あの人しか環境を作れない」という状況を防げます。

複雑なコマンド入力の手間を削減できます。通常のDockerでは、コンテナごとに長いコマンドを入力する必要がありますが、Docker Composeなら「docker-compose up」という一つのコマンドで環境全体を起動できます。

開発環境と本番環境の差異を最小化できます。チーム全員が同じ設定ファイルを使うことで、「自分のパソコンでは動くのに、他の人の環境では動かない」という問題を防げます。

新人教育や引き継ぎの負担を軽減できます。環境構築の手順書を何ページも作る必要はありません。docker-compose.ymlファイルと簡単な説明があれば、新しいメンバーもすぐに開発を始められます。

インストールと環境確認

Docker Composeを使い始めるには、まず適切にインストールする必要があります。

Dockerのインストール確認

Docker ComposeはDockerの拡張機能であり、Docker本体がなければ動作しません。まずターミナル(WindowsではコマンドプロンプトまたはPowerShell)を開いて、以下のコマンドを実行してください。

docker --version

バージョン情報が表示されれば、Dockerは正しくインストールされています。コマンドが見つからないというエラーが出た場合は、公式サイト(https://www.docker.com/)からDocker Desktopをダウンロードしてインストールしてください。

Docker Composeのインストール

最近のDocker Desktop(Windows/Mac)を使用している場合は、Docker Composeが最初から含まれているため、別途インストールする必要はありません。

Linuxの場合は、以下のコマンドでインストールできます。

# 最新版のDocker Composeをダウンロード
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 実行権限を付与
sudo chmod +x /usr/local/bin/docker-compose

インストール確認

Docker Composeが正しくインストールされているか、以下のコマンドで確認します。

docker-compose --version

正しくインストールされていれば、バージョン情報が表示されます。

注意点: Docker Composeには、古い形式(docker-compose)と新しい形式(docker compose)があります。最新のDocker Desktopでは両方使えますが、本記事では互換性を考慮してdocker-compose形式で説明します。

よくあるエラーと対処法

「docker-composeコマンドが見つかりません」

  • Docker Desktopが正しくインストールされているか確認
  • Docker Desktopが起動しているか確認(Windows/Macの場合)

「permission denied」(権限エラー)

Linuxで発生しやすいエラーです。以下のコマンドで現在のユーザーをdockerグループに追加します。

sudo usermod -aG docker $USER
# ログアウトして再ログインが必要

「Cannot connect to the Docker daemon」

Dockerデーモンが起動していない場合に発生します。

  • Windows/Mac:Docker Desktopを起動
  • Linux:sudo systemctl start dockerでDockerサービスを起動

docker-compose.ymlファイルの書き方

Docker Composeの核となるのがdocker-compose.ymlファイルです。このファイルに環境の設定をすべて記述することで、複雑なコマンドを覚えることなく、簡単に環境を管理できます。

YAMLファイルの基本ルール

docker-compose.ymlは、YAML形式で記述します。以下のルールを守る必要があります。

インデント(字下げ)が非常に重要です。YAMLでは、インデントで階層構造を表現します。スペース2個または4個で統一し、タブ文字は使用できません

# 正しい例(スペース2個)
services:
  web:
    image: nginx
    ports:
      - "80:80"

コロン(:)の後には必ずスペースが必要です。リスト項目はハイフン(-)で始めます。コメントはシャープ(#)で記述できます。

基本構造と主要項目

docker-compose.ymlファイルの基本構造を理解しましょう。

version: '3.8'  # Docker Composeのバージョン

services:  # 起動するコンテナの定義
  web:  # サービス名(任意の名前)
    image: nginx:latest  # 使用するDockerイメージ
    ports:  # ポートマッピング
      - "80:80"
    
  db:  # 2つ目のサービス
    image: mysql:8.0
    environment:  # 環境変数
      MYSQL_ROOT_PASSWORD: password

volumes:  # データ保存領域(オプション)
  db-data:

networks:  # ネットワーク設定(オプション)
  default:
    driver: bridge

version: Docker Composeのファイル形式のバージョンを指定します。現在は'3.8'を指定するのが一般的です。

services: 最も重要なセクションです。ここに起動したいコンテナの情報を記述します。

volumes: データを永続化するための設定です。コンテナを削除してもデータを保持したい場合に使用します。

networks: コンテナ間の通信設定を定義します。省略した場合は、デフォルトのネットワークが自動的に作成されます。

サービス定義の主要項目

image: 使用するDockerイメージを指定します。

image: nginx:latest  # Docker Hubからnginxの最新版を取得

ports: ホスト側のポートとコンテナ側のポートを紐付けます。

ports:
  - "8080:80"  # ホストの8080番ポートをコンテナの80番に転送

environment: コンテナ内で使用する環境変数を設定します。

environment:
  MYSQL_ROOT_PASSWORD: mypassword
  MYSQL_DATABASE: myapp

volumes: ホストのディレクトリやボリュームをコンテナ内にマウントします。

volumes:
  - ./data:/var/lib/mysql  # ホストの./dataをコンテナにマウント
  - db-data:/var/lib/mysql  # 名前付きボリュームを使用

depends_on: サービスの起動順序を制御します。

depends_on:
  - db  # dbサービスが起動してからwebを起動

restart: コンテナが停止した際の再起動動作を指定します。

restart: always  # 常に再起動
restart: unless-stopped  # 手動停止以外は再起動

実用的な設定例

Webアプリケーション(Nginx)とデータベース(MySQL)を組み合わせた実用的な例です。

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass123
      MYSQL_DATABASE: myapp
      MYSQL_USER: appuser
      MYSQL_PASSWORD: apppass123
    volumes:
      - db-data:/var/lib/mysql
    restart: unless-stopped

volumes:
  db-data:

このファイルをdocker-compose.ymlという名前で保存し、同じディレクトリでdocker-compose upを実行すれば、Webサーバーとデータベースが同時に起動します。

基本コマンドの使い方

docker-compose.ymlファイルが準備できたら、実際にコンテナを操作してみましょう。いくつかの基本コマンドを覚えるだけで、ほとんどの操作ができます。

docker-compose up:コンテナを起動

docker-compose upは、最も頻繁に使うコマンドです。docker-compose.ymlに定義されたすべてのサービスを起動します。

docker-compose up

このコマンドを実行すると、以下の処理が自動的に行われます。

  1. 必要なDockerイメージがなければダウンロード
  2. ネットワークの作成
  3. ボリュームの作成
  4. すべてのコンテナの起動

よく使うオプション:

# バックグラウンドで起動
docker-compose up -d

# イメージを再ビルドして起動
docker-compose up --build

# 特定のサービスだけ起動
docker-compose up web

# 強制的に再作成
docker-compose up --force-recreate

-dオプション(detachedモード)を付けると、コンテナがバックグラウンドで起動し、ターミナルが占有されません。実務ではこちらを使うことが多いです。

docker-compose down:停止・削除

docker-compose downは、起動中のコンテナを停止し、関連するネットワークも削除します。

docker-compose down

stopとdownの違い

  • docker-compose stop:コンテナを停止するだけ(削除はしない)
  • docker-compose down:コンテナを停止して削除する
# ボリュームも削除する場合(データが消えるので注意)
docker-compose down -v

# イメージも削除する場合
docker-compose down --rmi all

docker-compose ps:状態を確認

docker-compose psは、現在のコンテナの状態を確認するコマンドです。

docker-compose ps

実行すると、コンテナ名、実行中のコマンド、状態(Up=起動中、Exit=停止中)、ポートマッピングなどの情報が表示されます。

その他の便利なコマンド

ログを確認

# すべてのサービスのログを表示
docker-compose logs

# 特定のサービスのログのみ表示
docker-compose logs web

# リアルタイムでログを表示
docker-compose logs -f

# 最新100行のみ表示
docker-compose logs --tail=100

エラーが発生したときは、まずこのコマンドでログを確認しましょう。

コンテナ内でコマンドを実行

# データベースに接続
docker-compose exec db mysql -u root -p

# Webサーバーのシェルに入る
docker-compose exec web sh

execコマンドは、起動中のコンテナ内で任意のコマンドを実行できます。デバッグや設定確認に便利です。

再起動

# すべてのサービスを再起動
docker-compose restart

# 特定のサービスのみ再起動
docker-compose restart web

注意点: docker-compose.ymlがあるディレクトリで実行する必要があります。別のディレクトリから実行する場合は-fオプションでファイルを指定します。

docker-compose -f /path/to/docker-compose.yml up

実践例:WordPress環境を構築してみよう

実際にDocker Composeを使ってWordPress環境を構築してみましょう。WordPress + MySQLという実用的な構成を通じて、Docker Composeの使い方を体験できます。

構築する環境の全体像

今回構築するのは、以下の2つのコンテナで構成されるWordPress環境です。

  • WordPressコンテナ:WebサーバーとしてApacheを含むWordPress
  • MySQLコンテナ:データベースサーバー

この2つのコンテナは同じネットワーク内で通信し、WordPressがMySQLにデータを保存します。データは永続化されるため、コンテナを停止・削除してもデータは失われません。

docker-compose.ymlの作成

まず、作業用のディレクトリを作成します。

mkdir wordpress-docker
cd wordpress-docker

次に、docker-compose.ymlファイルを作成します。

version: '3.8'

services:
  db:
    image: mysql:8.0
    container_name: wordpress-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword123
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppassword123
    volumes:
      - db-data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    container_name: wordpress-app
    restart: always
    depends_on:
      - db
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppassword123
    volumes:
      - wp-data:/var/www/html

volumes:
  db-data:
  wp-data:

コンテナの起動と動作確認

docker-compose.ymlを保存したら、以下のコマンドで起動します。

docker-compose up -d

初回起動時は、必要なイメージのダウンロードに数分かかります。起動が完了したら、ブラウザでhttp://localhost:8080にアクセスしてください。WordPressの初期設定画面が表示されれば成功です。

状態を確認するには:

docker-compose ps

ログを確認するには:

docker-compose logs -f

データの永続化とバックアップ

この設定では、db-datawp-dataという名前付きボリュームを使用しています。これにより、コンテナを削除してもデータは保持されます。

バックアップの取り方:

# データベースのバックアップ
docker-compose exec db mysqldump -u wpuser -p wordpress > backup.sql

# WordPressファイルのバックアップ
docker-compose exec wordpress tar czf /tmp/wp-backup.tar.gz /var/www/html
docker cp wordpress-app:/tmp/wp-backup.tar.gz ./

環境を削除する場合:

# コンテナとネットワークを削除(データは保持)
docker-compose down

# データも含めてすべて削除
docker-compose down -v

よくあるトラブルと解決方法

Docker Composeを使っていると、いくつかの典型的なエラーに遭遇することがあります。ここでは、よくあるトラブルと解決方法を紹介します。

コンテナが起動しない場合

ログを確認する

まずはログを確認しましょう。エラーの原因はほとんどの場合、ログに記録されています。

docker-compose logs

よくある原因:

  • 環境変数の設定ミス
  • イメージのダウンロード失敗
  • 依存関係の問題

ポート番号の競合エラー

「port is already allocated」というエラーが出る場合、指定したポートが既に使用されています。

解決方法:

# docker-compose.ymlのポート番号を変更
ports:
  - "8080:80"  # 80番が使われている場合は8080など別のポートに変更

または、既に使用しているサービスを停止します。

ボリュームやネットワークの問題

ボリュームやネットワークが残っていて問題が発生する場合があります。

解決方法:

# 未使用のボリュームを削除
docker volume prune

# 未使用のネットワークを削除
docker network prune

# すべてのリソースをクリーンアップ
docker system prune -a

設定変更が反映されない

docker-compose.ymlを変更したのに反映されない場合は、コンテナを再作成する必要があります。

# コンテナを強制的に再作成
docker-compose up --force-recreate

業務で活かすDocker Compose活用のヒント

Docker Composeの基本的な使い方を理解したら、次は業務での活用を考えましょう。中小企業でDocker Composeを効果的に活用するためのヒントを紹介します。

開発環境の標準化で属人化を防ぐ

Docker Composeを使えば、チーム全員が同じ開発環境を使えます。docker-compose.ymlファイルをGitなどのバージョン管理システムで共有することで、誰でも同じ環境を再現できます。

実践のポイント:

  • docker-compose.ymlをプロジェクトのルートディレクトリに配置
  • READMEに簡単な起動手順を記載
  • 環境変数は.envファイルで管理(パスワードなど)
# .envファイルの利用例
environment:
  MYSQL_PASSWORD: ${DB_PASSWORD}

新人教育や引き継ぎをスムーズにする

新しいメンバーが参加した際、環境構築に何時間もかかっていた作業が、Docker Composeなら数分で完了します。

引き継ぎドキュメントの例:

# 開発環境の構築手順

1. リポジトリをクローン
2. `docker-compose up -d`を実行
3. `http://localhost:8080`にアクセス

以上で開発環境が起動します。

チーム内での共有とベストプラクティス

環境ごとに設定ファイルを分ける

開発環境と本番環境で設定を分けたい場合は、複数のファイルを用意します。

# 開発環境
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

# 本番環境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

機密情報の管理

パスワードなどの機密情報は、.envファイルに記載し、.gitignoreに追加してバージョン管理から除外します。

# .gitignore
.env

次のステップ:さらに学ぶべきこと

Docker Composeの基本を理解したら、以下のトピックに進むことをお勧めします。

  • Dockerfileの作成:独自のイメージを作成する
  • マルチステージビルド:本番用の軽量なイメージを作成
  • Docker Swarm / Kubernetes:本番環境でのコンテナオーケストレーション
  • CI/CDパイプライン:自動テスト・デプロイの実現

Docker Composeは、複雑な環境構築を簡単にする強力なツールです。この記事で学んだ内容を実際の業務で活用し、開発効率の向上と属人化の解消を実現してください。

#Docker#Docker Compose#DevOps
共有:

ちょっとした業務の悩みも、気軽にご相談ください。

まずは話だけ聞いてもらう