この記事は前回の記事の続きになります。
2.必要なDocker関連ファイル
2.docker-compose.yml
docker-compose.ymlとは各環境を一括管理するための設定ファイルです。
今回のプロジェクトでは以下のように記述しています。
docker-compose.yml
networks:
app-network:
driver: bridge
services:
backend:
build: ./backend
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILE}
SPRING_DATA_MONGODB_URI: "mongodb://admin:password@mongo:27017/taskmanager"
depends_on:
mongo:
condition: service_healthy
networks:
- app-network
restart: always
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./src:/app/src # ローカルのsrcをコンテナの/app/srcにマウント
depends_on:
- backend
networks:
- app-network
restart: always
mongo:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
environment:
MONGO_USERNAME: ${MONGO_USERNAME}
MONGO_PASSWORD: ${MONGO_PASSWORD}
networks:
- app-network
restart: always
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.runCommand({ ping: 1 })"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mongo_data:
上から順に確認していきましょう。
1.networks
networks:
app-network:
driver: bridge
- すべてのサービスが app-network を使用して通信するよう設定。
- driver: bridge により、サービス間での通信が可能。
2.backend
services:
backend:
build: ./backend
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILE}
SPRING_DATA_MONGODB_URI: "mongodb://admin:password@mongo:27017/taskDB"
depends_on:
mongo:
condition: service_healthy
networks:
- app-network
restart: always
- build:./backend → backend ディレクトリ内の Dockerfile を基にコンテナを作成。
- ports:ホストの 8080 をコンテナの 8080 にマッピング。
- environment:
- SPRING_PROFILES_ACTIVE → .env から Spring Boot のプロファイル設定を適用。
- SPRING_DATA_MONGODB_URI → MongoDB への接続 URI(環境変数未使用)
- depends_on:mongo の healthcheck が成功したら backend を起動。
- restart:always → 異常終了時も自動で再起動。
3.frontend
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./src:/app/src
depends_on:
- backend
networks:
- app-network
restart: always
- build:./frontend → frontend ディレクトリの Dockerfile を基にイメージを作成。
- ports:ホストの 3000 をコンテナの 3000 にマッピング。
- volumes:./src:/app/src → ローカルの src ディレクトリをコンテナにマウントし、変更を即座に反映可能。
- depends_on:backend 起動後に frontend を起動。
- restart:always → 障害時に再起動。
4.mongo
services:
mongo:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
environment:
MONGO_USERNAME: ${MONGO_USERNAME}
MONGO_PASSWORD: ${MONGO_PASSWORD}
networks:
- app-network
restart: always
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.runCommand({ ping: 1 })"]
interval: 10s
timeout: 5s
retries: 5
- image:mongo:latest → MongoDB の最新バージョンを使用。
- ports:ホストの 27017 をコンテナの 27017 にマッピング。
- volumes:mongo_data:/data/db → MongoDB のデータを永続化。
- environment:.env ファイルから MONGO_USERNAME と MONGO_PASSWORD を取得し環境変数として適用。
- restart:always → 異常終了時に再起動。
- healthcheck:mongosh コマンドで MongoDB が稼働しているか確認(5回リトライ)。
5.volumes
volumes:
mongo_data:
- mongo_data:MongoDB のデータを保持。
説明は以上になります。
これからも学習の記録を投稿していきますのでよろしくお願いします。