0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker設定ファイルの記載について #2(初心者)

Posted at

この記事は前回の記事の続きになります。

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 のデータを保持。

説明は以上になります。
これからも学習の記録を投稿していきますのでよろしくお願いします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?