⑥Docker・コンテナ

Docker Composeで複数コンテナを管理する【yaml設定ファイルの書き方】

⑥Docker・コンテナ
記事内に広告が含まれています。

「WebサーバーとDBを同時に起動したい」「開発環境をコマンド一発で再現したい」そんな場面で活躍するのがDocker Composeです。複数のコンテナをYAMLファイルで定義して、docker compose up一発で全部まとめて起動できます。この記事ではdocker-compose.ymlの書き方から実践的な使い方まで徹底解説します。

Docker Composeとは?

Docker Composeは複数のコンテナをまとめて定義・管理するツールです。Webアプリ開発では「Nginxコンテナ」「アプリコンテナ」「MySQLコンテナ」など複数のコンテナが連携することが多く、これらを個別にdocker runするのは大変です。Docker Composeを使えば、すべての設定を1つのdocker-compose.ymlファイルに書いておくだけで環境を再現できます。

Docker Composeの主なメリット

  • 複数コンテナを1コマンドで起動・停止できる
  • 設定をYAMLファイルでコードとして管理できる
  • チームで同じ開発環境を簡単に共有できる
  • コンテナ間のネットワークが自動設定される
  • 環境変数・ボリューム・ポートの設定を一元管理できる

docker-compose.ymlの基本構造

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - app

  app:
    build: .
    environment:
      - DB_HOST=db
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

実践例:WordPress + MySQL環境

version: '3.8'

services:
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppassword
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppassword
    volumes:
      - wp_data:/var/www/html
    depends_on:
      - db

volumes:
  db_data:
  wp_data:

このファイルを用意してdocker compose up -dを実行するだけで、WordPressとMySQLが自動的に連携した状態で起動します。http://localhost:8080でアクセスできます。

よく使うdocker composeコマンド

コマンド説明
docker compose up全サービスを起動
docker compose up -dバックグラウンドで起動
docker compose up --buildイメージを再ビルドしてから起動
docker compose down全サービスを停止・削除
docker compose down -vボリュームも含めて削除
docker compose psサービスの状態を確認
docker compose logs全サービスのログを表示
docker compose logs -f appappサービスのログをリアルタイム表示
docker compose exec app bashappコンテナにシェルで入る
docker compose restart全サービスを再起動
docker compose pull最新イメージを取得
docker compose buildイメージをビルド(起動しない)

環境変数の管理(.envファイル)

パスワードなどの機密情報は.envファイルに分離して管理するのがベストプラクティスです。

# .envファイルの例(.gitignoreに追加すること!)
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppassword
# docker-compose.ymlで.envの変数を参照
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

healthcheckでコンテナの状態を監視する

services:
  db:
    image: mysql:8.0
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  app:
    image: myapp:latest
    depends_on:
      db:
        condition: service_healthy

まとめ

  • Docker Composeは複数コンテナをYAMLで定義して一括管理するツール
  • docker compose up -dで全サービスをバックグラウンドで起動できる
  • 機密情報は.envファイルに分離してgitignoreに追加する
  • healthcheckを使うとサービスの起動順序を確実に制御できる
  • WordPressやFlaskなど複数サービスを組み合わせた開発環境を素早く構築できる

コメント

タイトルとURLをコピーしました