4.1 初期化
このステップでは、compose.yaml
ファイルを設定して、マルチコンテナアプリケーションのすべてのサービスを起動するよ。compose.yaml
ファイルには、フロントエンド、バックエンド、データベースの設定、またネットワークやボリュームの定義が含まれる。
Docker Composeバージョンの指定
まずはDocker Composeのバージョンを指定することから始めるよ。この例では、バージョン3を使っている:
version: '3'
4.2 サービスの定義
サービス 1: フロントエンド (ReactJS)
フロントエンド用のサービスを定義するよ。このサービスはfrontendディレクトリから構築され、ポート3000で利用可能になる:
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
サービス 2: バックエンド (Flask)
バックエンド用のサービスを定義するよ。このサービスはbackendディレクトリから構築され、データベースサービスに依存していて、ポート5000で利用可能になる:
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の公式イメージを使ってデータベース用のサービスを定義するよ。データベース作成やユーザーのクレデンシャルを設定するための環境変数を構成する:
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 ネットワークとボリュームの設定
サービスが使うネットワークとボリュームを定義しよう:
networks:
task-network:
driver: bridge
volumes:
db-data:
ここで:
- networks:
task-network
というネットワークを定義。このネットワークはbridge
ドライバータイプで、コンテナ間の通信に使用されるよ。 - volumes:
db-data
というボリュームを定義。これはデータベースのデータを保存するために使われるよ。
4.4 完全なファイル docker-compose.yml
では、すべての部分を1つのファイルdocker-compose.yml
に統合しよう:
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
ファイルが設定されたので、次のコマンドで全サービスを起動できるよ:
docker compose up
このコマンドは、compose.yaml
に定義された設定を使用して、フロントエンド、バックエンド、データベースのコンテナを作成して起動するよ。
起動確認
コンテナを起動した後、すべてのサービスが正しく動作していることを確認してね:
- Frontend: ブラウザを開いて、http://localhost:3000 にアクセスしてフロントエンドが動作しているか確認してね。
- Backend: ブラウザを開いて、http://localhost:5000 にアクセスしてバックエンドが動作しているか確認してね。
- Database: データベースコンテナが起動していて、バックエンドとのネットワーク通信が可能であることを確認してね。
GO TO FULL VERSION