【初心者向け】Docker Composeの使い方を基礎から実践まで徹底解説

kento_morota 15分で読めます

「開発環境の構築で毎回つまずく」「担当者が変わると環境を再現できない」――チーム開発でこうした問題を感じたことはありませんか?

この記事では、Docker Composeの基礎から実践的な使い方まで、インストール方法、基本コマンド、設定ファイルの書き方をステップバイステップで解説します。

Docker Composeとは?複数コンテナを一元管理するツール

「開発環境の構築で毎回つまずく」「担当者が変わると環境が再現できない」——こんな悩みを抱えていませんか?

Docker Composeは、複数のDockerコンテナを1つの設定ファイルで一元管理できるツールです。これまで手作業で行っていた環境構築を自動化でき、属人化の防止や業務効率化に直結します。

この記事では、Docker Composeの基礎から実践的な使い方まで、初心者の方にも分かりやすく解説します。

Docker Composeが解決する3つの課題

1. 環境構築の属人化を解消

「この環境は○○さんしか構築できない」という状況は、企業にとって大きなリスクです。Docker Composeを使えば、環境構築の手順が1つのファイルに集約されるため、誰でも同じ環境を再現できます。

2. 新人教育の時間を大幅短縮

従来は複雑な手順を1つずつ教える必要がありましたが、Docker Composeなら「このコマンドを実行してください」だけで済みます。

3. 環境差異による不具合を削減

「ローカルでは動いたのに本番では動かない」という問題の多くは環境の違いが原因です。Docker Composeで環境を統一すれば、こうした問題を大幅に減らせます。

通常のDockerコマンドとの違い

Dockerコマンドだけでも環境構築は可能ですが、複数のコンテナを扱う場合は管理が煩雑になります。

通常のDockerでは、各コンテナを個別に起動し、ネットワーク設定や環境変数を1つずつ指定する必要があります。一方、Docker Composeなら、これらすべての設定を1つのYAMLファイルに記述し、docker-compose upという1つのコマンドで起動できます。

設定の可視化も大きな違いです。ファイルを見れば構成が一目瞭然なため、チームでの共有や引き継ぎがスムーズになります。

Docker Composeの基礎知識

Docker Composeを効果的に使うための基本概念を押さえておきましょう。

コンテナとイメージの仕組み

イメージは、アプリケーションを動かすための「設計図」です。例えば、WordPress用のイメージには、WordPressを動かすために必要なすべてのファイルや設定が含まれています。

コンテナは、そのイメージから実際に作られた「実行環境」です。設計図(イメージ)から建物(コンテナ)を建てるイメージです。

従来の仮想マシンと比べて軽量で高速なのが特徴で、起動が速く、リソースの消費も少なくて済みます。

主要な用語解説

サービス(Service): 1つの役割を持つコンテナの定義。「Webサーバー」「データベース」など、それぞれがサービスとして定義されます。

ボリューム(Volume): データを永続化する場所。コンテナは削除するとデータも消えますが、ボリュームを使えばデータを保持できます。

ネットワーク(Network): コンテナ同士が通信するための仕組み。Docker Composeでは、同じ設定ファイルで定義したサービス同士は自動的に通信できます。

ポート(Port): 外部からアクセスするための「入口」。Webサーバーを外部から見られるようにするには、ポートを公開する設定が必要です。

環境変数(Environment): アプリケーションの設定を外部から渡す仕組み。データベースのパスワードなど、環境によって変わる値を設定します。

インストール方法

Docker Composeを使うには、まずDockerのインストールが必要です。最近のDocker Desktop(Windows/Mac版)には、Docker Composeが標準で含まれています。

システム要件

  • Windows: Windows 10/11 Pro/Enterprise/Education(64bit)、WSL2が有効
  • Mac: macOS 10.15以降、Intel ChipまたはApple Silicon
  • Linux: 64bit版、カーネル3.10以降
  • メモリ: 最低4GB、推奨8GB以上
  • ディスク: 20GB以上の空き容量

インストール手順

Windows/Mac

  1. Docker公式サイトから、Docker Desktopをダウンロード
  2. インストーラーを実行し、画面の指示に従う
  3. Docker Desktopを起動

Linux(Ubuntu/Debian)

# 必要なパッケージをインストール
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# Dockerの公式GPGキーを追加
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# リポジトリを設定
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker Engineをインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 一般ユーザーで使えるように設定
sudo usermod -aG docker $USER

インストール確認

# Dockerのバージョン確認
docker --version

# Docker Composeのバージョン確認
docker compose version

# 動作確認
docker run hello-world

「Hello from Docker!」というメッセージが表示されれば成功です。

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

Docker Composeの中心となるのがdocker-compose.ymlという設定ファイルです。YAML形式で記述します。

YAMLファイルの基本ルール

インデント(字下げ)でデータの階層を表現します。これが最も重要なルールです。

親要素:
  子要素1: 値
  子要素2: 値

重要なポイント:

  • インデントは半角スペースのみ(タブ不可)
  • スペース2つまたは4つで統一
  • コロン(:)の後ろには必ず半角スペース
  • リストはハイフン(-)で表現
  • コメントはシャープ(#)で記述

基本構造と必須項目

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

version: ファイル形式のバージョン(現在は3.8または3.9が一般的)

services: 実行するコンテナの定義

volumes: データを永続化するボリューム定義(省略可)

networks: カスタムネットワーク定義(省略可)

よく使う設定項目

image / build

services:
  # 既存イメージを使用
  web:
    image: nginx:1.21

  # Dockerfileからビルド
  app:
    build:
      context: ./app
      dockerfile: Dockerfile

ports(ポートマッピング)

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"  # ホスト:コンテナ
      - "443:443"

volumes(データの永続化)

services:
  db:
    image: mysql:8.0
    volumes:
      - db-data:/var/lib/mysql  # 名前付きボリューム
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql  # ファイルマウント

volumes:
  db-data:

environment(環境変数)

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: myapp

depends_on(起動順序の制御)

services:
  web:
    image: nginx:latest
    depends_on:
      - db  # dbが起動してからwebを起動
  db:
    image: mysql:8.0

restart(再起動ポリシー)

services:
  web:
    image: nginx:latest
    restart: always  # 常に再起動

オプション:no(再起動しない)、always(常に再起動)、on-failure(エラー時のみ)、unless-stopped(手動停止以外は再起動)

基本コマンドの使い方

Docker Composeの操作は、主に4つのコマンドで行います。すべてのコマンドはdocker-compose.ymlファイルがあるディレクトリで実行します。

docker-compose up(起動)

サービスを起動します。

# フォアグラウンドで起動(ログが表示される)
docker-compose up

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

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

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

docker-compose down(停止・削除)

サービスを停止し、コンテナを削除します。

# コンテナとネットワークを削除
docker-compose down

# ボリュームも削除
docker-compose down -v

# イメージも削除
docker-compose down --rmi all

docker-compose ps(状態確認)

実行中のコンテナを確認します。

docker-compose ps

docker-compose logs(ログ確認)

コンテナのログを表示します。

# 全サービスのログを表示
docker-compose logs

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

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

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

その他の便利なコマンド

# コンテナ内でコマンドを実行
docker-compose exec web bash

# サービスを再起動
docker-compose restart

# イメージをビルド
docker-compose build

# 設定ファイルの構文チェック
docker-compose config

実践例:WordPress環境の構築

実際にDocker Composeを使って、WordPress環境を構築してみましょう。

docker-compose.ymlの作成

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    container_name: my-wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress-data:/var/www/html
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mysql:8.0
    container_name: my-mysql
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppass
      MYSQL_ROOT_PASSWORD: rootpass
    volumes:
      - db-data:/var/lib/mysql
    restart: unless-stopped

volumes:
  wordpress-data:
  db-data:

起動と確認

# 起動
docker-compose up -d

# 状態確認
docker-compose ps

# ログ確認
docker-compose logs -f

ブラウザでhttp://localhost:8080にアクセスすると、WordPressのセットアップ画面が表示されます。

停止と削除

# 停止(データは保持)
docker-compose down

# データも含めて完全削除
docker-compose down -v

業務活用のポイント

環境の標準化と属人化の防止

Docker Composeの設定ファイルをGitなどで管理すれば、チーム全員が同じ環境で作業できます。「この環境は○○さんしか分からない」という状況を解消できます。

セキュリティ対策

環境変数の管理

パスワードなどの機密情報は、.envファイルに分離します。

# .envファイル
MYSQL_ROOT_PASSWORD=your_secure_password
MYSQL_PASSWORD=your_secure_password
# docker-compose.yml
services:
  db:
    image: mysql:8.0
    env_file:
      - .env

.envファイルは.gitignoreに追加し、Gitにコミットしないようにします。

本番環境への展開時の注意

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

インデントエラー

症状: yaml: line X: mapping values are not allowed in this context

原因: YAMLのインデントが間違っている

解決: 半角スペース2つまたは4つで統一し、タブ文字を使わない

ポート競合エラー

症状: Bind for 0.0.0.0:8080 failed: port is already allocated

原因: 指定したポートが既に使用されている

解決: 別のポート番号に変更する

ports:
  - "8081:80"  # 8080→8081に変更

コンテナが起動しない

症状: コンテナが起動後すぐに停止する

解決手順:

# ログを確認
docker-compose logs

# 特定のサービスのログを詳しく見る
docker-compose logs -f サービス名

エラーメッセージから原因を特定し、設定を修正します。

まとめ

Docker Composeは、複数のコンテナを1つの設定ファイルで管理できる強力なツールです。

この記事で学んだこと:

  • Docker Composeの基本概念と導入メリット
  • docker-compose.ymlファイルの書き方
  • 基本的なコマンドの使い方
  • WordPress環境構築の実践例

次のステップ:

  1. 実際に簡単な環境を構築してみる
  2. 自社の開発環境をDocker Compose化する
  3. チームで設定ファイルを共有し、標準化を進める

Docker Composeを活用することで、環境構築の属人化を防ぎ、チーム全体の生産性を向上させることができます。さらに大規模なコンテナ管理が必要な場合はKubernetesの導入も検討してみましょう。まずは小さな環境から始めて、徐々に活用範囲を広げていきましょう。

#Docker#Compose#使い方
共有:

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

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