>_DEVELOP

DockerのYAMLファイルとCompose V2について

目次

DockerのYAMLファイル(docker-compose.yml)は、複数のコンテナをまとめて定義し、起動・管理できる便利な仕組みです。この記事では、その書き方と内容を詳しく解説します。

役割としては、コンテナを構成する設定を、記述しているものです。


✅ 前提条件

  • Docker および Docker Compose がインストール済みであること
  • 基本的なターミナル操作ができること
  • Docker イメージやコンテナの概念を理解していること(簡単に言えば「アプリケーションの実行環境をまとめた箱」)

YAMLファイルの主要構成

Docker Compose の YAML ファイルは、以下の4つを軸に構成されます:

  1. version:定義ファイルのバージョン
  2. services:コンテナ(サービス)の定義
  3. networks:サービス間の通信設定
  4. 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番ポートへ転送する」という設定です。


よくあるポートの例:

サービス名コンテナ内のポートホストで使うことが多いポート用途例
Nginx808080, 8000, 80HTTP(Webサーバー)
MySQL33063306, 3307データベース接続
Redis63796379キャッシュストア
PostgreSQL54325432, 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:

上記設定により、webdbが同じ仮想ネットワークに属するため、コンテナ名(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-composedocker 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