DockerのYAMLファイルと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 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 |