docker-compose.ymlファイルの書き方 超入門

1. はじめに

Docker Composeとは?

Docker Composeは、複数のDockerコンテナを定義し、実行するためのツールです。単一の設定ファイルを使用して、アプリケーションの全サービスを構成し、単一のコマンドでそれらすべてを起動または停止することができます。

Docker Composeの概要と役割

  • 複数コンテナの定義と管理を簡素化

  • アプリケーションのスタック全体を単一のファイルで記述

  • 開発、テスト、本番環境での一貫性を確保

Dockerのマルチコンテナ環境の管理の利点

  • 環境の再現性が向上

  • 開発からプロダクションまでの移行が容易に

  • マイクロサービスアーキテクチャの実装をサポート

2. Docker Composeの基本

docker-compose.ymlファイルとは?

docker-compose.ymlは、Docker Composeが使用する主要な設定ファイルです。YAMLフォーマットで記述され、アプリケーションのサービス、ネットワーク、ボリュームを定義します。

ymlファイルの基本構造

version: '3'
services:
  # サービス定義
volumes:
  # ボリューム定義
networks:
  # ネットワーク定義

主な要素の説明

  • version: 使用するDocker Composeファイルのバージョン

  • services: アプリケーションを構成する各コンテナの設定

  • volumes: データの永続化に使用するボリューム

  • networks: コンテナ間の通信に使用するネットワーク

最もシンプルなdocker-compose.ymlの例

以下は、単一のWebサーバーを実行する最も基本的なdocker-compose.ymlの例です:

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"

各要素の簡単な解説

  • web: サービス名(任意の名前を付けられます)

  • image: 使用するDockerイメージ

  • ports: ホストとコンテナのポートマッピング(ホスト:コンテナ)

3. docker-compose.ymlの詳細な解説

複数のサービスの定義

実際のアプリケーションでは、複数のサービスを組み合わせることが一般的です。以下は、Webサーバーとデータベースを組み合わせた例です:

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

サービス間の通信や依存関係の設定方法

  • depends_on: サービスの起動順序を制御(この例では、dbサービスが先に起動)

  • サービス名をホスト名として使用可能(例:webサービスからdbサービスへの接続には"db"というホスト名を使用)

ボリュームとネットワークの管理

データの永続化とネットワークの分離は、多くのアプリケーションで重要です。

version: '3'
services:
  web:
    image: nginx:alpine
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - backend
volumes:
  db_data:
networks:
  frontend:
  backend:

永続化データを扱うためのボリューム設定

  • 名前付きボリューム(db_data): データの永続化に使用

  • バインドマウント(./html:/usr/share/nginx/html): ホストのファイルシステムとの共有

カスタムネットワークの設定方法とその利点

  • フロントエンドとバックエンドの分離

  • セキュリティの向上(必要なサービス間のみ通信可能)

環境変数の使用

環境変数を使用することで、異なる環境で同じdocker-compose.ymlファイルを再利用できます。

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "${WEB_PORT}:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}

環境変数を使って設定を柔軟に変更する方法

  • ${変数名} の形式で環境変数を参照

  • コマンドラインや.envファイルで値を設定可能

.envファイルの利用例

WEB_PORT=8080
DB_ROOT_PASSWORD=mysecretpassword

.envファイルをdocker-compose.ymlと同じディレクトリに配置することで、自動的に読み込まれます。

まとめ

Docker Composeは、複雑なマルチコンテナアプリケーションの管理を大幅に簡素化します。本記事で紹介した基本概念と実践的な例を通じて、Docker Composeの強力な機能を活用し、効率的な開発環境や本番環境の構築に役立ててください。
初心者の方は、まずシンプルな構成から始め、徐々に複雑な設定に挑戦していくことをおすすめします。Docker Composeの公式ドキュメントも参考になりますので、ぜひ併せてご覧ください。


いいなと思ったら応援しよう!