DockerのYAMLファイル(docker-compose.yml
)は、複数のコンテナをまとめて定義し、起動・管理できる便利な仕組みです。この記事では、その書き方と内容を詳しく解説します。
役割としては、コンテナを構成する設定を、記述しているものです。
✅ 前提条件
- Docker および Docker Compose がインストール済みであること
- 基本的なターミナル操作ができること
- Docker イメージやコンテナの概念を理解していること(簡単に言えば「アプリケーションの実行環境をまとめた箱」)
YAMLファイルの主要構成
Docker Compose の YAML ファイルは、以下の4つを軸に構成されます:
version
:定義ファイルのバージョンservices
:コンテナ(サービス)の定義networks
:サービス間の通信設定volumes
:データ永続化の仕組み
1. version
の指定
1 2 |
version: '3.8' |
この設定は、YAMLファイルの記法や機能の互換性を保つために必要です。3.8
は一例で、使用するDocker Composeのバージョンに合わせて変更可能です。
2. services
: コンテナの構成とポートマッピング
1 2 3 4 5 6 |
services: web: image: nginx:latest ports: - "8080:80" |
各要素の説明:
services
: コンテナの役割ごとにまとめる定義ブロックweb
: サービス名(任意)image
: 利用するDockerイメージ(ここでは公式のnginx
イメージ)ports
: ポートマッピング(ホスト:コンテナ)
🔍 ポートマッピングとは?
ポートマッピングは、ホストOSのポートとコンテナ内のポートを繋ぐ設定です。
例:
1 2 3 |
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 | データベース接続 |
⚠ ポートが競合しないように、ホスト側のポート番号は他アプリと被らないようにするのがポイントです。
複数サービスを定義する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
: コンテナ間通信のネットワーク設定
1 2 3 4 5 6 7 8 9 10 11 |
services: web: networks: - app-net db: networks: - app-net networks: app-net: |
上記設定により、web
とdb
が同じ仮想ネットワークに属するため、コンテナ名(web/db)で相互通信可能になります。DNS設定など不要で、db:3306
と書けば接続可能です。
4. volumes
: データの永続化
1 2 3 4 5 6 7 8 9 |
services: db: image: mysql:5.7 volumes: - db-store:/var/lib/mysql volumes: db-store: |
ボリュームは、コンテナを削除してもデータを保持する仕組みです。MySQLのデータが /var/lib/mysql
に保存されているため、これをホスト側の永続ボリューム db-store
にマウントしています。
⚠ YAMLのインデントに注意!
YAMLファイルではスペースの数が文法の一部です。
❌ 間違い例(インデント不足):
1 2 3 4 |
services: web: image: nginx:latest |
✅ 正しい例(2スペース以上のインデント):
1 2 3 4 |
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
コマンドを紹介します。
▶ 起動(バックグラウンドで)
1 2 |
docker compose up -d |
-d
:デタッチモード(バックグラウンド起動)- YAMLファイル内のすべてのサービスを起動します。
⏹ 停止と削除
1 2 |
docker compose down |
- 停止してネットワーク・ボリュームなども削除します。
🔁 再起動(変更反映したいとき)
1 2 |
docker compose up -d --build |
--build
:Dockerfileの変更を反映してビルドしなおす
📦 ビルドだけ
1 2 |
docker compose build |
- イメージだけを先にビルドしたいときに使用します。
📜 ログの確認
1 2 |
docker compose logs |
- 全サービスのログを表示します
1 2 |
docker compose logs -f web |
- 特定のサービス(例:
web
)のログをリアルタイム表示
📂 実行中のサービス確認
1 2 |
docker compose ps |
- 現在稼働中のコンテナ状態を一覧表示します。
🧪 サービス内でコマンド実行
1 2 |
docker compose exec db bash |
db
サービスの中に入って、bash
を起動します。
1 2 |
docker compose exec web ls -la |
web
サービスの中でls -la
を実行
🧼 イメージの削除を含む完全なクリーンアップ
1 2 |
docker compose down --volumes --rmi all |
--volumes
:ボリューム削除--rmi all
:すべてのビルド済みイメージを削除
🔍 環境変数ファイルの指定
1 2 |
docker compose --env-file myenv.env up -d |
.env
以外のファイルを使いたい場合に便利
🎯 補足:V1との互換性
- ほとんどのV1コマンドとオプションは、V2でも同じ感覚で使えます。
- ただし、スペースの有無に注意!
- ✅
docker compose up
(正しい) - ❌
docker-compose up
(古い)
- ✅
🚀 Docker Compose V2 を確認する方法
1 2 |
docker compose version |
出力例:
1 2 |
Docker Compose version v2.27.0 |
または以下のコマンドでもバージョンチェックができます:
1 2 |
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 |