目次
- YAMLファイルの主要構成
- 🧾 まとめ
- 🐳 Docker Compose V2 とは?
- ✅ V1 から V2 への主な変更点
- 🔧 よく使う Docker Compose V2 コマンド一覧
- 🎯 補足:V1との互換性
- 🚀 Docker Compose V2 を確認する方法
- 🔚 まとめ
DockerのYAMLファイル(docker-compose.yml
)は、複数のコンテナをまとめて定義し、起動・管理できる便利な仕組みです。この記事では、その書き方と内容を詳しく解説します。
役割としては、コンテナを構成する設定を、記述しているものです。
✅ 前提条件
- Docker および Docker Compose がインストール済みであること
- 基本的なターミナル操作ができること
- Docker イメージやコンテナの概念を理解していること(簡単に言えば「アプリケーションの実行環境をまとめた箱」)
YAMLファイルの主要構成
Docker Compose の YAML ファイルは、以下の4つを軸に構成されます:
version
:定義ファイルのバージョンservices
:コンテナ(サービス)の定義networks
:サービス間の通信設定volumes
:データ永続化の仕組み
1. version
の指定
version: '3.8'
この設定は、YAMLファイルの記法や機能の互換性を保つために必要です。3.8
は一例で、使用するDocker Composeのバージョンに合わせて変更可能です。
2. services
: コンテナの構成とポートマッピング
services:
web:
image: nginx:latest
ports:
- "8080:80"
各要素の説明:
services
: コンテナの役割ごとにまとめる定義ブロックweb
: サービス名(任意)image
: 利用するDockerイメージ(ここでは公式のnginx
イメージ)ports
: ポートマッピング(ホスト:コンテナ)
🔍 ポートマッピングとは?
ポートマッピングは、ホストOSのポートとコンテナ内のポートを繋ぐ設定です。
例:
ports:
- "8080:80"
この設定は次のような意味になります:
項目 | 意味 |
---|---|
8080 (左側) | ホスト側のポート。ブラウザでアクセスする時に使う(例:http://localhost:8080 ) |
80 (右側) | コンテナ側のポート。Nginxが内部で待ち受けているポート番号 |
つまり、「ホストの8080番ポートにアクセスされたら、それをコンテナ内の80番ポートへ転送する」という設定です。
よくあるポートの例:
サービス名 | コンテナ内のポート | ホストで使うことが多いポート | 用途例 |
---|---|---|---|
Nginx | 80 | 8080, 8000, 80 | HTTP(Webサーバー) |
MySQL | 3306 | 3306, 3307 | データベース接続 |
Redis | 6379 | 6379 | キャッシュストア |
PostgreSQL | 5432 | 5432, 5433 | データベース接続 |
⚠ ポートが競合しないように、ホスト側のポート番号は他アプリと被らないようにするのがポイントです。
複数サービスを定義する例:
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mypassword
ports:
- "3307:3306"
ここでは、web
(Nginx)と db
(MySQL)を同時に立ち上げ、ホストからアクセスできるようにポートを公開しています。
http://localhost:8080
→ NginxのWeb画面- MySQLクライアントから
localhost:3307
→ MySQLに接続
3. networks
: コンテナ間通信のネットワーク設定
services:
web:
networks:
- app-net
db:
networks:
- app-net
networks:
app-net:
上記設定により、web
とdb
が同じ仮想ネットワークに属するため、コンテナ名(web/db)で相互通信可能になります。DNS設定など不要で、db:3306
と書けば接続可能です。
4. volumes
: データの永続化
services:
db:
image: mysql:5.7
volumes:
- db-store:/var/lib/mysql
volumes:
db-store:
ボリュームは、コンテナを削除してもデータを保持する仕組みです。MySQLのデータが /var/lib/mysql
に保存されているため、これをホスト側の永続ボリューム db-store
にマウントしています。
⚠ YAMLのインデントに注意!
YAMLファイルではスペースの数が文法の一部です。
❌ 間違い例(インデント不足):
services:
web:
image: nginx:latest
✅ 正しい例(2スペース以上のインデント):
services:
web:
image: nginx:latest
🧾 まとめ
Docker Compose の YAML ファイルは、複数のコンテナを整理して管理するうえで不可欠なツールです。
version
:構文のバージョン制御services
:各サービスの設定(ポートマッピングが重要)networks
:サービス間通信の定義volumes
:データ永続化の設定
特にポートマッピングの意味を理解することで、ホストからどのようにアクセスするのか、コンテナがどのポートで動いているのかが明確になります。
了解しました。以下では Docker Compose V2 のコマンド体系について、V1との違いやよく使うコマンドを中心に、初心者でも理解しやすいように体系的に解説します。
🐳 Docker Compose V2 とは?
Docker Compose V2 は、従来の docker-compose
コマンドに代わって docker compose
(スペースあり) を使う新しい形式です。
これは Docker CLI に統合されており、追加インストール不要で利用できるようになっています。
✅ V1 から V2 への主な変更点
項目 | V1(旧) | V2(新) |
---|---|---|
実行形式 | docker-compose | docker compose |
バイナリ | 独立したバイナリ | Docker CLIに統合(docker コマンドのサブコマンド) |
インストール | 別途必要 | Docker Desktop に含まれる(v20.10.13以降) |
利点 | 従来の互換性重視 | 統一されたCLI、Kubernetes対応など |
🔧 よく使う Docker Compose V2 コマンド一覧
以下、よく使う docker compose
コマンドを紹介します。
▶ 起動(バックグラウンドで)
docker compose up -d
-d
:デタッチモード(バックグラウンド起動)- YAMLファイル内のすべてのサービスを起動します。
⏹ 停止と削除
docker compose down
- 停止してネットワーク・ボリュームなども削除します。
🔁 再起動(変更反映したいとき)
docker compose up -d --build
--build
:Dockerfileの変更を反映してビルドしなおす
📦 ビルドだけ
docker compose build
- イメージだけを先にビルドしたいときに使用します。
📜 ログの確認
docker compose logs
- 全サービスのログを表示します
docker compose logs -f web
- 特定のサービス(例:
web
)のログをリアルタイム表示
📂 実行中のサービス確認
docker compose ps
- 現在稼働中のコンテナ状態を一覧表示します。
🧪 サービス内でコマンド実行
docker compose exec db bash
db
サービスの中に入って、bash
を起動します。
docker compose exec web ls -la
web
サービスの中でls -la
を実行
🧼 イメージの削除を含む完全なクリーンアップ
docker compose down --volumes --rmi all
--volumes
:ボリューム削除--rmi all
:すべてのビルド済みイメージを削除
🔍 環境変数ファイルの指定
docker compose --env-file myenv.env up -d
.env
以外のファイルを使いたい場合に便利
🎯 補足:V1との互換性
- ほとんどのV1コマンドとオプションは、V2でも同じ感覚で使えます。
- ただし、スペースの有無に注意!
- ✅
docker compose up
(正しい) - ❌
docker-compose up
(古い)
- ✅
🚀 Docker Compose V2 を確認する方法
docker compose version
出力例:
Docker Compose version v2.27.0
または以下のコマンドでもバージョンチェックができます:
docker version
出力の中に「compose
」バージョン情報が含まれていれば V2 です。
🔚 まとめ
やりたいこと | V2コマンド |
---|---|
起動 | docker compose up -d |
停止+削除 | docker compose down |
再ビルド+起動 | docker compose up -d --build |
ログの確認 | docker compose logs -f |
コンテナ内で実行 | docker compose exec [サービス] |
サービスの状態確認 | docker compose ps |