はじめに
このチュートリアルは、Docker Compose を使用する方法を包括的に解説し、特に「docker: 'compose' is not a docker command」エラーへの対処法に焦点を当てています。Docker Compose のインストールと設定、マルチコンテナアプリケーションの構築と管理、そして効果的な Docker Compose の使用方法に関するベストプラクティスを学ぶことができます。
Docker の基礎
Docker コンテナ化の概要
Docker は、アプリケーションのデプロイと開発を革新する強力なコンテナ技術です。コンテナ技術により、開発者はアプリケーションとその依存関係をすべてパッケージ化し、さまざまなコンピューティング環境で一貫したパフォーマンスを確保できます。
Docker のコア概念
Docker とは何か?
Docker は、開発者がアプリケーションのデプロイ、スケーリング、管理を自動化できるオープンソースのコンテナ化プラットフォームです。コンテナと呼ばれる隔離された環境を作成することで、従来の仮想マシンに比べて軽量な代替手段を提供します。
Docker の主要コンポーネント
| コンポーネント | 説明 |
|---|---|
| Docker Engine | コンテナの作成と実行のための主要なランタイム環境 |
| Docker イメージ | アプリケーションコードと依存関係を含む読み取り専用テンプレート |
| Docker コンテナ | Docker イメージの実行可能なインスタンス |
| Dockerfile | コンテナビルド手順を定義するテキストファイル |
Docker アーキテクチャ
graph TD
A[Docker クライアント] --> B[Docker デーモン]
B --> C[コンテナ ランタイム]
B --> D[イメージ レジストリ]
D --> E[Docker Hub]
基本的な Docker コマンドと例
Ubuntu 22.04 への Docker インストール
## システムパッケージの更新
sudo apt update
## Docker 依存関係のインストール
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker の公式 GPG キーの追加
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Docker リポジトリの設定
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker エンジンインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
基本的な Docker 操作
## Docker Hub からイメージをプル
## 利用可能なイメージの一覧表示
## コンテナを実行
## 実行中のコンテナの一覧表示
## コンテナを停止
コンテナ技術の利点
Docker コンテナ化は、以下の利点を提供します。
- 一貫したアプリケーション環境
- より高速なデプロイとスケーリング
- リソース消費量の削減
- 開発ワークフローの改善
- プラットフォームの独立性
Docker コンテナのユースケース
Docker は、以下の分野で広く使用されています。
- マイクロサービスアーキテクチャ
- CI/CD (継続的インテグレーション/継続的デリバリー)
- クラウドネイティブアプリケーション開発
- 開発およびテスト環境
Docker Compose のワークフロー
Docker Compose の理解
Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するためのツールです。開発者は YAML ファイルを使用してアプリケーションサービス、ネットワーク、ボリュームを設定することで、複雑なコンテナ化された環境の管理を簡素化できます。
Docker Compose のアーキテクチャ
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
Docker Compose の設定
YAML ファイルの構造
| キー | 説明 |
|---|---|
| version | Compose ファイルのフォーマットバージョン |
| services | 個々のコンテナを定義 |
| networks | コンテナのネットワーク設定 |
| volumes | 永続的なデータストレージの管理 |
実用的な例:Web アプリケーションのデプロイ
サンプル docker-compose.yml
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 コマンド
## Ubuntu 22.04 への Docker Compose のインストール
sudo apt update
sudo apt install docker-compose
## Compose ファイルの検証
docker-compose config
## マルチコンテナアプリケーションの起動
docker-compose up -d
## 実行中のコンテナの表示
docker-compose ps
## コンテナの停止と削除
docker-compose down
サービスオーケストレーションのテクニック
Docker Compose は高度なサービスオーケストレーションを可能にします。
- コンテナ間の依存関係の定義
- 環境変数の管理
- ネットワーク接続の設定
- コンテナの起動順序の制御
スケーラビリティと柔軟性
マルチコンテナアプリケーションは、以下の利点があります。
- モジュール型のアーキテクチャ
- 簡単な水平方向のスケーリング
- 設定管理の簡素化
- 一貫した開発環境
Docker の高度なテクニック
Docker ネットワークの設定
ネットワークの種類
| ネットワークモード | 説明 |
|---|---|
| Bridge | デフォルトのネットワークモード |
| Host | ホストネットワークを直接使用 |
| Overlay | マルチホスト間の通信 |
| Macvlan | MAC アドレスの割り当て |
graph TD
A[Docker ネットワーク] --> B[Bridge ネットワーク]
A --> C[Host ネットワーク]
A --> D[Overlay ネットワーク]
A --> E[Macvlan ネットワーク]
カスタムネットワークの作成
## カスタムブリッジネットワークの作成
docker network create --driver bridge custom_network
## ネットワークの一覧表示
docker network ls
## ネットワークの詳細の確認
docker network inspect custom_network
コンテナのリソース管理
リソースの制約
services:
webapp:
image: nginx
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
Docker ボリュームの管理
## 名前付きボリュームの作成
docker volume create app_data
## コンテナへのボリュームのマウント
docker run -v app_data:/app/data nginx
## ボリュームの一覧表示
docker volume ls
## 使用されていないボリュームの削除
docker volume prune
Dockerfile の最適化
## マルチステージビルドの例
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin
ENTRYPOINT ["myapp"]
高度なトラブルシューティング
## コンテナログの確認
## リアルタイムのリソース監視
## コンテナプロセス詳細
セキュリティ強化
ランタイムセキュリティオプション
## 読み取り専用ファイルシステムでコンテナを実行
docker run --read-only nginx
## コンテナの機能制限
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
パフォーマンス監視
## システム全体の Docker 情報
docker system info
## ディスク使用量分析
docker system df
## 使用されていないリソースの削除
docker system prune -a
まとめ
このチュートリアルを終了すると、Docker Compose の詳細な理解と、「docker: 'compose' is not a docker command」エラーのトラブルシューティング方法を習得します。業界標準のベストプラクティスに従い、最適なパフォーマンスと保守性を確保しながら、Docker Compose アプリケーションを設定、管理、スケールできるようになります。



