マルチコンテナ Docker アプリケーションのデプロイ方法

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

はじめに

Docker Compose は、開発者がコンテナの管理とアプリケーションのデプロイを効率化するための不可欠なツールです。この包括的なチュートリアルでは、Docker Compose の基礎を掘り下げ、複雑なマルチコンテナ環境を効率的かつ体系的に構成、デプロイ、管理するための実践的な洞察を提供します。

Docker Compose の基礎

Docker Compose の概要

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

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

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

実践例: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 セクションは、Web サーバーとデータベースの 2 つのコンテナを定義します
  3. nginx サービスは、ホストポート 80 をコンテナポート 80 にマッピングします
  4. postgres サービスは、永続的なボリュームストレージを持つデータベースを設定します

インストールと基本コマンド

Ubuntu 22.04 に Docker Compose をインストールするには:

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

Docker Compose の主要なコマンド:

  • docker compose up: すべてのサービスを開始します
  • docker compose down: コンテナを停止および削除します
  • docker compose ps: 実行中のサービスを一覧表示します
  • docker compose logs: サービスログを表示します

構成とデプロイ

Docker Compose ファイル構造

Docker Compose の構成は、アプリケーション全体のインフラストラクチャを定義する YAML ファイルに依存します。標準的なファイル名は docker-compose.yml であり、包括的なサービス定義を含みます。

graph TD
    A[docker-compose.yml] --> B[サービス]
    A --> C[ネットワーク]
    A --> D[ボリューム]
    A --> E[環境変数]

サービス構成の詳細な例

version: "3.8"
services:
  backend:
    image: python:3.9
    build:
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL=postgresql://user:password@database:5432/appdb
    depends_on:
      - database

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

volumes:
  postgres_data:

構成パラメータ

パラメータ 説明
image ベースとなるコンテナイメージ nginx:latest
build カスタムイメージビルド構成 context: ./app
ports ポートのマッピング "8080:80"
volumes 永続的なデータストレージ - ./data:/app/data
environment コンテナ環境変数 DATABASE_HOST=localhost

デプロイ戦略

graph LR
    A[ローカル開発] --> B[ステージング環境]
    B --> C[本番デプロイ]
    C --> D[サービスのスケーリング]

デプロイコマンド

Ubuntu 22.04 上での一般的なデプロイワークフロー:

## compose ファイルの検証
docker compose config

## サービスのビルド
docker compose build

## サービスの起動
docker compose up -d

## 実行中のサービスの確認
docker compose ps

## ログの表示
docker compose logs backend

## サービスの停止
docker compose down

高度な構成テクニック

services:
  webserver:
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

高度な Compose 戦略

マルチ環境構成

Docker Compose は、複数の構成ファイルとオーバーライド機構を介して洗練された環境管理をサポートします。

graph LR
    A[基本構成] --> B[開発用オーバーライド]
    A --> C[本番用オーバーライド]
    A --> D[ステージング用オーバーライド]

環境固有の構成

version: "3.8"
services:
  application:
    image: myapp:latest
    environment:
      - APP_ENV=${DEPLOY_ENV:-development}
      - DATABASE_URL=${DATABASE_CONNECTION}

サービスの動的スケーリング

## web サービスを 3 つのインスタンスにスケールアップ
docker compose up -d --scale web=3

高度なネットワーク構成

ネットワークモード 説明 使用例
bridge デフォルトのネットワーク 隔離されたコンテナ間の通信
host ホストネットワークの直接接続 高パフォーマンスなシナリオ
custom ユーザー定義のネットワーク 複雑なマイクロサービスアーキテクチャ

本番運用対応の Compose 例

version: '3.8'
services:
  webserver:
    image: nginx:alpine
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

  backend:
    image: myapp:${VERSION}
    secrets:
      - db_password
    configs:
      - source: app_config
        target: /app/config.json

secrets:
  db_password:
    external: true

configs:
  app_config:
    file: ./config.json

コンテナのバージョン管理戦略

## バージョン付きイメージをタグ付けしてプッシュ
docker build -t myapp:v1.0 .
docker compose push

デプロイワークフロー

graph TD
    A[イメージのビルド] --> B[テストの実行]
    B --> C[レジストリへのプッシュ]
    C --> D[コンテナのデプロイ]
    D --> E[パフォーマンスの監視]

セキュリティとコンプライアンスコマンド

## Compose サービスの脆弱性スキャン
docker compose config --resolve-env-vars
docker scan docker-compose.yml

まとめ

Docker Compose を習得することで、開発者はコンテナオーケストレーションを簡素化し、インフラストラクチャをコードとして定義し、スケーラブルで再現可能なアプリケーション環境を作成できます。このチュートリアルでは、コアコンセプト、構成戦略、実用的な実装手法について説明し、さまざまなインフラストラクチャ環境でシームレスなマルチコンテナアプリケーションの開発とデプロイを可能にします。