はじめに
Docker Compose は、開発者がコンテナの管理とアプリケーションのデプロイを効率化するための不可欠なツールです。この包括的なチュートリアルでは、Docker Compose の基礎を掘り下げ、単一の宣言型構成ファイルを通して複雑なマルチコンテナ環境の作成、設定、管理について解説します。
Docker Compose は、開発者がコンテナの管理とアプリケーションのデプロイを効率化するための不可欠なツールです。この包括的なチュートリアルでは、Docker Compose の基礎を掘り下げ、単一の宣言型構成ファイルを通して複雑なマルチコンテナ環境の作成、設定、管理について解説します。
Docker Compose は、コンテナオーケストレーションのための強力なツールであり、開発者は単一の構成ファイルを通してマルチコンテナアプリケーションを定義および管理できます。宣言的な方法でサービス、ネットワーク、ボリュームを記述することで、複雑なアプリケーションアーキテクチャの実行を簡素化します。
Docker Compose は、アプリケーションサービスを構成するために YAML ファイルを使用し、コンテナサービスの構成を効率化します。主な構成ファイルは通常 docker-compose.yml と命名されます。
典型的な Docker Compose 構成には、重要な要素が含まれます。
| 要素 | 説明 | 例 |
|---|---|---|
| version | Compose ファイルのバージョン | version: '3.8' |
| services | コンテナ定義 | 複数のサービス構成 |
| networks | カスタムネットワーク設定 | ブリッジ、ホストネットワーク |
| volumes | 永続的なデータストレージ | 名前付きまたはホストマウントされたボリューム |
一般的な 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: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
マルチコンテナアプリケーションを管理するための重要な Docker Compose コマンドを以下に示します。
## docker-compose.yml に定義されたサービスを開始
docker-compose up -d
## コンテナを停止および削除
docker-compose down
## 実行中のコンテナを表示
docker-compose ps
## サービスのログを表示
docker-compose logs web
Docker Compose は、サービスの依存関係を定義することで、起動シーケンスを制御できます。
services:
web:
depends_on:
- database
restart: on-failure
この構成では、データベースサービスが web サービスの前に起動され、自動再起動機能が有効になります。
Docker ボリュームは、コンテナの永続的なストレージメカニズムを提供し、ホストシステムとコンテナ化されたアプリケーション間でのデータの保存と共有を可能にします。コンテナ化された環境におけるデータの永続性と状態管理の重要な課題を解決します。
| ボリュームタイプ | 特長 | 使用例 |
|---|---|---|
| 名前付きボリューム | Docker によって管理 | 永続的なアプリケーションデータ |
| バインドマウント | ホストファイルシステムのマッピング | 開発環境 |
| Tmpfs マウント | メモリベースのストレージ | 一時的な、機密データ |
version: "3.8"
services:
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backup:/database_backup
volumes:
postgres_data:
driver: local
## 名前付きボリュームを作成
docker volume create myapp_data
## 既存のボリュームを一覧表示
docker volume ls
## ボリュームの詳細を表示
docker volume inspect myapp_data
## 使用されていないボリュームを削除
docker volume prune
services:
web:
image: nginx:latest
volumes:
- ./website:/usr/share/nginx/html:ro
この構成は、ローカルディレクトリをコンテナにマッピングし、読み取り専用権限を付与することで、シームレスな開発ワークフローを可能にします。
Docker Compose は、環境固有の構成を通して洗練されたデプロイ戦略をサポートし、開発、ステージング、本番環境間のシームレスな移行を可能にします。
version: "3.8"
services:
web:
image: myapp:${TAG:-latest}
environment:
- DATABASE_HOST=${DATABASE_HOST:-localhost}
- DEBUG=${DEBUG:-false}
| ネットワークタイプ | 範囲 | 使用例 |
|---|---|---|
| ブリッジ | コンテナ間 | 内部通信 |
| ホスト | 直接ホストネットワーク | パフォーマンス重視のアプリケーション |
| オーバーレイ | マルチホストネットワーク | 分散システム |
version: "3.8"
services:
web:
networks:
- frontend
database:
networks:
- backend
networks:
frontend:
backend:
## 特定の構成でイメージをビルド
docker-compose build
## デタッチモードでデプロイ
docker-compose up -d
## 特定のサービスをスケール
docker-compose up --scale web=3
## ロールアップデートを実行
docker-compose up -d --no-deps --build web
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Docker Compose を習得することで、開発者は複雑なアプリケーションアーキテクチャを効率的にオーケストレーションし、サービス間の相互作用を定義し、ネットワーク構成を管理し、さまざまな環境間で一貫したデプロイを確実に行うことができます。このチュートリアルでは、コアコンセプト、実践的な構成戦略、および開発者がコンテナ化技術を効果的に活用するための必須のコマンドライン操作について説明します。