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 |