複数コンテナアプリケーション向け Docker Compose の設定方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker Compose は、コンテナ管理とアプリケーションのデプロイを効率化しようとする開発者や DevOps プロフェッショナルにとって不可欠なツールです。この包括的なチュートリアルは、基本的な設定からさまざまな環境での高度なデプロイ技術まで、Docker Compose を理解し実装するためのステップバイステップのガイドを提供します。

Docker Compose の基礎

Docker Compose の概要

Docker Compose は、複数のコンテナからなる Docker アプリケーションを定義および実行するための強力なツールです。YAML ファイルを使用してアプリケーションのサービス、ネットワーク、ボリュームを設定することで、コンテナオーケストレーションを簡素化します。

核心概念

graph TD
    A[Docker Compose] --> B[サービス定義]
    A --> C[マルチコンテナ管理]
    A --> D[環境設定]
キーコンセプト 説明
サービス アプリケーション内の個々のコンテナ
docker-compose.yml サービスを定義する設定ファイル
ボリューム コンテナの永続的なデータストレージ
ネットワーク コンテナ間の通信

Docker Compose 設定のサンプル

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Ubuntu 22.04 上の実践的な例

Docker Compose をインストールします。

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

マルチコンテナアプリケーションを実行します。

docker compose up -d
docker compose ps
docker compose down

利用事例

Docker Compose は以下の場合に最適です。

  • ローカル開発環境
  • 自動化されたテスト環境
  • 単一ホストアプリケーションのデプロイ
  • マイクロサービスアーキテクチャ

設定とデプロイ

Docker Compose ファイル構造

graph TD
    A[docker-compose.yml] --> B[バージョン]
    A --> C[サービス]
    A --> D[ネットワーク]
    A --> E[ボリューム]

包括的な設定例

version: "3.8"
services:
  web:
    image: python:3.9
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
    environment:
      - DEBUG=true
    depends_on:
      - database

  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

networks:
  default:
    driver: bridge

volumes:
  postgres_data:

環境設定の管理

設定タイプ 説明 使用例
環境変数 実行時設定 機密データ、接続文字列
.env ファイル 外部環境設定 コードから設定を分離
Docker Secrets 機密情報の安全な管理 パスワード、トークン

Ubuntu 22.04 上のデプロイコマンド

設定の検証:

docker compose config

サービスの起動:

docker compose up -d

サービスのスケーリング:

docker compose up -d --scale web=3

サービスの監視:

docker compose ps
docker compose logs

コンテナネットワーク戦略

graph LR
    A[コンテナネットワーク] --> B[ブリッジネットワーク]
    A --> C[ホストネットワーク]
    A --> D[オーバーレイネットワーク]

ボリューム管理テクニック

## 名前付きボリュームの作成
docker volume create myvolume

## ボリュームのリスト表示
docker volume ls

## ボリュームの詳細の確認
docker volume inspect myvolume

高度な Compose テクニック

サービスのスケーリングとロードバランシング

graph TD
    A[ロードバランサー] --> B[サービスレプリカ 1]
    A --> C[サービスレプリカ 2]
    A --> D[サービスレプリカ 3]

スケーリング設定

version: "3.8"
services:
  web:
    image: nginx:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    ports:
      - "80:80"

動的なサービス管理

テクニック コマンド 説明
サービスのスケーリング docker compose up --scale web=5 コンテナ数を動的に調整
ロールアップデート docker compose up --force-recreate 最小限のダウンタイムでサービスを更新
選択的なデプロイ docker compose up service1 service2 特定のサービスのみをデプロイ

プロダクション対応のデプロイ戦略

## 設定の検証
docker compose config

## ドライランデプロイ
docker compose up --dry-run

## プロダクションデプロイ
docker compose up -d --remove-orphans

コンテナのヘルスチェック

services:
  web:
    image: myapp:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

高度なネットワーク

graph LR
    A[カスタムネットワーク] --> B[内部通信]
    A --> C[外部アクセス]
    A --> D[サービスディスカバリ]

モニタリングとロギング

## リアルタイムサービスログ
docker compose logs -f

## リソースモニタリング
docker compose top

## パフォーマンス指標
docker stats

マルチ環境設定

version: "3.8"
services:
  web:
    image: myapp:${ENV:-development}
    environment:
      - DATABASE_URL=${DATABASE_URL}

シークレット管理

## Docker シークレットの作成
echo "database_password" | docker secret create db_password -

## compose ファイルでシークレットを使用する
services:
database:
secrets:
- db_password

Summary

By mastering Docker Compose, developers can simplify complex application architectures, improve deployment consistency, and create more scalable and maintainable containerized solutions. The tutorial demonstrates how to leverage YAML configurations, manage services, networks, and volumes, and effectively orchestrate multi-container applications with ease and efficiency.