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: Frontend (ReactJS)

프론트엔드를 위한 서비스를 정의할 건데, frontend 디렉토리에서 빌드되고 3000 포트에서 사용할 수 있게 될 거야:

Yaml

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

서비스 2: Backend (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: Database (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 파일

이제 모든 부분을 하나의 파일 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에 정의된 설정을 사용하여 frontend, backend, database의 컨테이너를 생성하고 실행할 거야.

실행 확인

컨테이너 실행 후, 모든 서비스가 제대로 작동하는지 확인해봐:

  1. Frontend: 브라우저를 열고 http://localhost:3000로 이동하여 프론트엔드가 정상 작동하는지 확인해.
  2. Backend: 브라우저를 열고 http://localhost:5000로 이동하여 백엔드가 정상 작동하는지 확인해.
  3. Database: database 컨테이너가 실행 중이며 백엔드와 네트워크를 통해 연결 가능한지 확인해.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION