CodeGym /コース /Docker SELF /すべてのサービスを起動するためのdocker-compose.ymlの設定

すべてのサービスを起動するためのdocker-compose.ymlの設定

Docker SELF
レベル 23 , レッスン 3
使用可能

4.1 初期化

このステップでは、compose.yamlファイルを設定して、マルチコンテナアプリケーションのすべてのサービスを起動するよ。compose.yamlファイルには、フロントエンド、バックエンド、データベースの設定、またネットワークやボリュームの定義が含まれる。

Docker Composeバージョンの指定

まずはDocker Composeのバージョンを指定することから始めるよ。この例では、バージョン3を使っている:

Yaml

version: '3'

4.2 サービスの定義

サービス 1: フロントエンド (ReactJS)

フロントエンド用のサービスを定義するよ。このサービスはfrontendディレクトリから構築され、ポート3000で利用可能になる:

Yaml

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network

サービス 2: バックエンド (Flask)

バックエンド用のサービスを定義するよ。このサービスはbackendディレクトリから構築され、データベースサービスに依存していて、ポート5000で利用可能になる:

Yaml

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

詳細:

  • depends_on: backendサービスはdatabaseサービスに依存しているよ。つまり、バックエンドが起動する前にデータベースが起動する必要があるってこと。
  • environment: データベースへの接続用の環境変数を設定するよ。

サービス 3: データベース (PostgreSQL)

postgres:13の公式イメージを使ってデータベース用のサービスを定義するよ。データベース作成やユーザーのクレデンシャルを設定するための環境変数を構成する:

Yaml

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

詳細:

  • environment: コンテナ起動時にデータベースおよびユーザーを作成するための環境変数を設定するんだ。
  • volumes: 永続的なデータ保存のためにdb-dataボリュームをマウントするよ。

4.3 ネットワークとボリュームの設定

サービスが使うネットワークとボリュームを定義しよう:

Yaml

networks:
  task-network:
    driver: bridge
      
volumes:
  db-data:

ここで:

  • networks: task-networkというネットワークを定義。このネットワークはbridgeドライバータイプで、コンテナ間の通信に使用されるよ。
  • volumes: db-dataというボリュームを定義。これはデータベースのデータを保存するために使われるよ。

4.4 完全なファイル docker-compose.yml

では、すべての部分を1つのファイルdocker-compose.ymlに統合しよう:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:

設定に関する説明

  • build: イメージをビルドするためのDockerfileがあるディレクトリのパスを指定する。
  • ports: サービスにアクセスするためにホスト上でポートを開く。
  • depends_on: サービスが他のサービスに依存していることを指定し、起動順序を確保する。
  • environment: サービスの環境変数を設定する。
  • networks: コンテナ間通信のネットワークを定義する。
  • volumes: データを永続的に保存するためのボリュームを定義する。

4.5 アプリケーションの起動

さて、compose.yaml ファイルが設定されたので、次のコマンドで全サービスを起動できるよ:

Terminal

docker compose up

このコマンドは、compose.yaml に定義された設定を使用して、フロントエンド、バックエンド、データベースのコンテナを作成して起動するよ。

起動確認

コンテナを起動した後、すべてのサービスが正しく動作していることを確認してね:

  1. Frontend: ブラウザを開いて、http://localhost:3000 にアクセスしてフロントエンドが動作しているか確認してね。
  2. Backend: ブラウザを開いて、http://localhost:5000 にアクセスしてバックエンドが動作しているか確認してね。
  3. Database: データベースコンテナが起動していて、バックエンドとのネットワーク通信が可能であることを確認してね。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION