Docker

Docker compose 사용법

프론트엔드코린이 2025. 7. 22. 12:05

🧩 3티어 Docker Compose 구성

# Docker Compose 버전을 지정합니다. 3.8은 최신 기능과 호환되는 안정적인 버전입니다.
version: "3.8"

services:
  # 1. PostgreSQL 데이터베이스 서비스 정의
  db:
    image: postgres:17 # 공식 PostgreSQL 17 이미지를 사용합니다.
    container_name: hello-db # 생성될 컨테이너의 이름을 hello-db로 지정합니다.
    networks:
      - hello-net # frontend, backend와 동일한 네트워크로 연결
    environment:
      POSTGRES_DB: hello_db         # 생성할 데이터베이스 이름
      POSTGRES_USER: hellouser      # DB 접속용 사용자명
      POSTGRES_PASSWORD: 1234       # 해당 사용자의 비밀번호
    volumes:
      - hello-data:/var/lib/postgresql/data # 데이터 영속화를 위한 볼륨
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 초기 테이블 및 데이터 삽입 SQL 파일
    ports:
      - "5432:5432" # 호스트의 5432 포트를 컨테이너의 5432 포트와 연결 (개발 중 DB 접근용)

  # 2. Spring Boot 백엔드 애플리케이션 서비스 정의
  backend:
    build:
      context: ./backend         # backend 폴더를 빌드 컨텍스트로 사용
      dockerfile: Dockerfile     # backend 폴더 안의 Dockerfile 사용
    container_name: hello-backend # 컨테이너 이름을 hello-backend로 설정
    networks:
      - hello-net # db, frontend와 동일 네트워크로 연결
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://hello-db:5432/hello_db # DB 연결 주소
      SPRING_DATASOURCE_USERNAME: hellouser                            # DB 사용자명
      SPRING_DATASOURCE_PASSWORD: 1234                                 # DB 비밀번호
    ports:
      - "8080:8080" # 호스트의 8080 포트를 백엔드 컨테이너와 연결
    depends_on:
      - db # db 서비스가 먼저 실행된 후 backend가 실행되도록 설정

  # 3. Next.js 프론트엔드 애플리케이션 서비스 정의
  frontend:
    build:
      context: ./frontend         # frontend 폴더를 빌드 컨텍스트로 사용
      dockerfile: Dockerfile      # frontend 폴더 내 Dockerfile 사용
      args:
        NEXT_PUBLIC_API_URL: http://localhost:8080 # 프론트엔드에서 백엔드 API를 호출할 때 사용할 주소
    container_name: hello-frontend # 컨테이너 이름을 hello-frontend로 지정
    networks:
      - hello-net # backend, db와 동일 네트워크로 연결
    ports:
      - "3000:3000" # 호스트의 3000 포트를 frontend 컨테이너와 연결
    depends_on:
      - backend # backend가 실행된 후 frontend가 실행되도록 설정

# 공통 네트워크 설정 (서비스 간 통신을 위해 동일한 네트워크 필요)
networks:
  hello-net:

# DB 데이터를 유지할 볼륨 설정
volumes:
  hello-data:

📁 디렉토리 구조 예시

project-root/
│
├── docker-compose.yml
├── init.sql
│
├── backend/
│   ├── Dockerfile
│   └── ... (Spring Boot 프로젝트)
│
└── frontend/
    ├── Dockerfile
    └── ... (Next.js 프로젝트)

🚀 실행 방법

# 빌드 및 컨테이너 시작
docker compose up -d --build

# 종료 및 정리
docker-compose down

✅ 접속 확인

'Docker' 카테고리의 다른 글

Docker를 활용한 3tier 배포(DB, FE, BE)  (2) 2025.07.22