
【Docker基礎】Docker ComposeとDockerfileの違い
Dockerを効果的に活用するためには、Docker ComposeとDockerfileという二つの重要なツールを理解することが不可欠です。これらは名前が似ているために混同されやすいですが、それぞれ異なる目的と機能を持っています。ここでは、Docker ComposeとDockerfileの違いについて詳しく解説し、どのような場面でどちらを使用すべきかを明確にします。

1.Docker Composeとは
1.1 Docker Composeの基本概念
Docker Composeは、複数のDockerコンテナを一括で定義・管理・実行するためのツールです。YAML形式の定義ファイル(通常はdocker-compose.yml
)に、必要なコンテナやその設定、ネットワーク、ボリュームなどを記述することで、複雑なマルチコンテナ環境をシンプルに構築・運用することが可能になります。
1.2 Docker Composeの利便性
- 一括管理: 複数のコンテナを一つのコマンドで起動・停止・削除できます。
- 再現性の確保: 定義ファイルにより、どの環境でも同じ設定でコンテナを展開できます。
- 依存関係の管理: コンテナ間の依存関係を明確に定義し、順序通りに起動できます。
- ネットワークとボリュームの統合管理: ネットワークやボリュームも一緒に定義・管理できます。
2.Dockerfileとは
2.1 Dockerfileの基本概念
Dockerfileは、単一のDockerイメージをビルドするための設定ファイルです。テキストベースで、ベースとなるイメージの指定や、必要なパッケージのインストール、アプリケーションのコピー、実行コマンドの設定などを記述します。Dockerfileを基に、docker build
コマンドを使用してカスタマイズされたイメージを作成します。
2.2 Dockerfileの利便性
- カスタムイメージの作成: 特定の要件に合わせたDockerイメージを簡単に作成できます。
- バージョン管理: Dockerfileはコードとして管理できるため、変更履歴の追跡が容易です。
- 自動化: CI/CDパイプラインと連携させて、自動的にイメージをビルド・テスト・デプロイすることが可能です。
3.Docker ComposeとDockerfileの違い
3.1 目的の違い
項目 | Docker Compose | Dockerfile |
---|---|---|
主な目的 | 複数のコンテナとその周辺環境(ネットワーク、ボリュームなど)を一括で管理・運用する | 単一のDockerイメージをビルド・カスタマイズする |
使用する場面 | マルチコンテナアプリケーションのデプロイ、開発環境の構築 | アプリケーションの依存関係を含むカスタムイメージの作成 |
3.2 機能の違い
機能 | Docker Compose | Dockerfile |
---|---|---|
コンテナの起動・停止 | 一括で行える | 個別にdocker run やdocker stop を使用する |
ネットワークの設定 | YAMLファイル内で定義可能 | Dockerfileでは設定不可 |
ボリュームの設定 | YAMLファイル内で定義可能 | Dockerfileでは設定不可 |
イメージのビルド | docker-compose build でビルド可能(Dockerfileに依存) | docker build で直接ビルド |
依存関係の管理 | depends_on を使用してコンテナ間の依存関係を定義可能 | Dockerfileでは依存関係の管理が不可 |
定義ファイルの形式 | YAML形式 | 各種Dockerコマンドを記述したテキストファイル |
3.3 具体的な使用例
Docker Composeを使用した場合
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpressuser
MYSQL_PASSWORD: userpass
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpressuser
WORDPRESS_DB_PASSWORD: userpass
depends_on:
- db
volumes:
db_data:
Dockerfileを使用した場合
FROM ubuntu:20.04
COPY ./myapp /usr/src/myapp
RUN apt-get update && apt-get install -y python3
CMD ["python3", "/usr/src/myapp/app.py"]
3.4 Docker ComposeとKubernetesの違い
項目 | Docker Compose | Kubernetes |
---|---|---|
主な目的 | ローカル環境や小規模なデプロイメント向けのマルチコンテナ管理 | 大規模なクラスタ環境でのコンテナオーケストレーション |
管理機能 | コンテナの起動・停止・ネットワーク・ボリューム管理のみ | 自動スケーリング、自己修復、ロードバランシングなど高度な管理機能 |
学習曲線 | 比較的容易 | 複雑で高度 |
使用規模 | 開発環境、小規模な本番環境 | 大規模な本番環境 |
図:Docker ComposeとKubernetesの比較
Docker Compose
├── コンテナ1
├── コンテナ2
├── ネットワーク
└── ボリューム
Kubernetes
├── Pod
│ ├── コンテナ1
│ └── コンテナ2
├── Service
├── Deployment
└── Volume
4.Docker ComposeとDockerfileの使い分け
4.1 使用シーンに応じた選択
シーン | 推奨ツール | 理由 |
---|---|---|
単一アプリケーションのカスタムイメージ作成 | Dockerfile | イメージのビルドとカスタマイズに特化しているため |
マルチコンテナ環境の管理と運用 | Docker Compose | 複数のコンテナやその設定を一括で管理できるため |
大規模なクラスタ環境のオーケストレーション | Kubernetes | 自動スケーリングや自己修復など高度な管理機能が必要な場合 |
4.2 実際の運用における組み合わせ
多くのプロジェクトでは、DockerfileとDocker Composeを組み合わせて使用します。Dockerfileで各コンテナのカスタムイメージを作成し、Docker Composeでそれらのコンテナを一括で管理・運用します。これにより、個々のイメージのカスタマイズとマルチコンテナ環境の管理の両方を効率的に行うことができます。
Docker ComposeとDockerfileのまとめ
項目 | Docker Compose | Dockerfile |
---|---|---|
目的 | マルチコンテナ環境の定義・管理・運用 | 単一のカスタムDockerイメージのビルド・設定 |
定義ファイルの形式 | YAML形式 (docker-compose.yml ) | テキストファイル (Dockerfile ) |
主な機能 | コンテナの一括起動・停止、ネットワーク・ボリューム管理 | イメージのベース設定、パッケージのインストール、ファイルのコピー |
依存関係の管理 | 可能 | 不可 |
使用するコマンド | docker-compose up , docker-compose down | docker build , docker run |
適用範囲 | 開発環境、小規模な本番環境 | イメージ作成時 |
これらの違いを理解し、適切に使い分けることで、Dockerをより効果的に活用し、開発から本番環境へのデプロイまでのプロセスを効率化することができます。次章では、Docker Composeの具体的な使い方について詳しく解説し、実際のプロジェクトでの適用方法を学びます。引き続き、Dockerの学習を進めていきましょう。