Docker Compose を活用した Web サービス構築のマスターガイド

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

はじめに

この包括的なチュートリアルでは、マルチコンテナ Docker アプリケーションを定義および管理するための強力なツールである Docker Compose を探ります。開発者と DevOps 専門家を対象としたこのガイドでは、スケーラブルで効率的なコンテナ化された環境を作成するための重要な概念、構成テクニック、および実践的な実装戦略について説明します。

Docker Compose の基礎

Docker Compose の概要

Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するための強力なツールです。コンテナオーケストレーションの重要なコンポーネントとして、開発者は単一の YAML 設定ファイルを使用して複雑なアプリケーション環境を構成および管理できます。

核心概念とアーキテクチャ

Docker Compose は、宣言的なコンテナデプロイメントアプローチを提供することで、複数の相互接続されたコンテナを管理するプロセスを簡素化します。主なコンポーネントは次のとおりです。

コンポーネント 説明
docker-compose.yml サービス、ネットワーク、ボリュームを定義する設定ファイル
サービス アプリケーションを構成する個々のコンテナ
ネットワーク コンテナ間の通信チャネル
ボリューム 永続的なデータストレージメカニズム
graph TD
    A[Docker Compose] --> B[docker-compose.yml]
    B --> C[Service 1]
    B --> D[Service 2]
    B --> E[Service 3]
    C --> F[Network]
    D --> F
    E --> F

実践的な例:Web アプリケーションの設定

ここでは、一般的な Web アプリケーションの Docker Compose 設定を示す包括的な例を示します。

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

volumes:
  postgres_data:

コードの解説

  1. version: '3.8': Docker Compose ファイルのフォーマットを指定
  2. services: 個々のコンテナを定義
  3. web: Nginx Web サーバーの設定
    • ポート 80 をマッピング
    • ローカルのウェブサイトファイルをマウント
  4. database: PostgreSQL データベースの設定
    • 環境変数を設定
    • データストレージ用の永続的なボリュームを作成

Docker Compose の主な利点

  • マルチコンテナアプリケーションの管理を簡素化
  • 開発環境と本番環境の一貫性
  • 水平方向のスケーリングが容易
  • 宣言的なインフラストラクチャ構成

コマンドライン操作

コンテナ管理のための重要な Docker Compose コマンドは次のとおりです。

コマンド 機能
docker-compose up 定義されたすべてのサービスを開始
docker-compose down コンテナを停止および削除
docker-compose ps 実行中のコンテナのリスト表示
docker-compose logs コンテナログの表示

Docker Compose を活用することで、開発者は最小限の構成オーバーヘッドで複雑なコンテナ化アプリケーションを効率的に管理できます。

設定とサービス

YAML 設定構造

Docker Compose は、YAML ファイルを使用して複雑なマルチコンテナ環境を定義します。設定は、サービス定義、ネットワーク、および環境管理のための包括的なアプローチを提供します。

サービス定義構文

version: "3.8"
services:
  application:
    image: ubuntu:22.04
    container_name: my_app
    ports:
      - "8080:80"
    volumes:
      - ./app:/var/www/html
    environment:
      - DEBUG=true
    networks:
      - backend

設定パラメータ

パラメータ 説明
image ベースコンテナイメージ ubuntu:22.04
ports ポートマッピング "8080:80"
volumes 永続的なストレージ ./app:/var/www/html
environment 環境変数 DEBUG=true

コンテナネットワーク

graph TD
    A[Docker Compose ネットワーク] --> B[Service 1]
    A --> C[Service 2]
    A --> D[Service 3]
    B --- E[内部通信]
    C --- E
    D --- E

高度なサービス設定

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - database
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

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

volumes:
  postgres_data:

環境管理

Docker Compose は、複数の環境設定方法をサポートしています。

方法 説明
.env ファイル 環境変数を格納するファイル
environment キー インライン変数定義
外部環境 システムレベルの変数

ネットワークモード

ネットワークタイプ 使用例
Bridge デフォルトのコンテナネットワーク
Host ホストネットワークへの直接アクセス
Overlay マルチホスト間の通信
Custom ユーザー定義のネットワーク構成

Docker の高度なデプロイ

実運用レベルのデプロイ戦略

高度な Docker デプロイでは、さまざまな環境におけるパフォーマンス、セキュリティ、スケーラビリティを総合的に考慮する必要があります。

スケーラビリティの設定

version: "3.8"
services:
  web:
    image: nginx:latest
    deploy:
      replicas: 4
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
        max_attempts: 3

コンテナオーケストレーションアーキテクチャ

graph TD
    A[ロードバランサ] --> B[コンテナクラスター]
    B --> C[Service 1]
    B --> D[Service 2]
    B --> E[Service 3]
    C --> F[水平方向のスケーリング]
    D --> F
    E --> F

セキュリティのベストプラクティス

セキュリティの側面 実装方法
ルート以外のユーザー 特権を持たないユーザーとしてコンテナを実行
ネットワークの分離 カスタムネットワークを使用
シークレット管理 Docker シークレットを使用
リソース制限 CPU/メモリ制限を設定

高度なネットワーク設定

networks:
  backend:
    driver: overlay
    attachable: true
  frontend:
    driver: bridge
    internal: true

パフォーマンス最適化手法

最適化 説明
マルチステージビルド イメージサイズを削減
キャッシュ戦略 ビルド時間を最小限に抑える
リソース割り当て CPU/メモリ制限を設定
ヘルスチェック コンテナの信頼性を確保

デプロイスクリプトの例

#!/bin/bash
docker-compose up -d --scale web=3 --remove-orphans
docker-compose ps
docker-compose logs

モニタリングとロギング

services:
  monitoring:
    image: prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
  logging:
    image: grafana/grafana
    ports:
      - "3000:3000"

まとめ

Docker Compose は、宣言的なアプローチでコンテナ管理を行うことで、複雑なアプリケーションのデプロイを簡素化します。その設定構文を習得し、サービス間の相互作用を理解し、ボリュームとネットワークの設定を活用することで、開発者らは、開発、テスト、および本番ワークフローを効率化する、堅牢で再現可能なコンテナ環境を作成できます。