본 캠프_61일차

졸용·2025년 5월 16일

TIL

목록 보기
62/144

Docker만으로도 강력하지만, Docker Compose(도커 컴포즈)는 여러 개의 컨테이너를 한 번에 정의하고 실행할 수 있도록 도와주는 도구이다.


🧩 Docker Compose란?

Docker Compose는 docker-compose.yml이라는 파일 하나로 여러 컨테이너(서비스)를 구성하고 관리할 수 있게 해준다.

예를 들어, 웹 애플리케이션을 실행할 때:

  • 웹 서버 (예: Spring)
  • 데이터베이스 (예: MySQL)
  • Redis 캐시

이렇게 여러 개의 컨테이너가 필요하잖아? 이걸 한 번에 설정하고 실행할 수 있도록 해주는 게 Docker Compose다.


📄 docker-compose.yml 예시

version: '3'
services:
  web:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb

설명:

  • web: Spring 애플리케이션 (Dockerfile 기준으로 빌드)
  • db: MySQL 8.0 컨테이너
  • depends_on: web 서비스가 db가 먼저 실행된 다음에 실행되도록 설정

🚀 실행 방법

docker-compose up
  • 모든 서비스 컨테이너가 순서에 맞게 실행됨
docker-compose down
  • 실행 중인 모든 컨테이너 종료 및 정리

💡 왜 Docker Compose를 쓸까?

DockerDocker Compose
하나의 컨테이너만 쉽게 실행여러 개의 컨테이너를 한 번에 실행
docker run 명령어 직접 입력설정 파일로 정의해 재사용 가능
복잡한 의존관계 관리 불편depends_on 등으로 쉽게 구성

Java Spring 애플리케이션과 MySQL 데이터베이스를 Docker Compose로 구성하는 구체적인 예제를 보자면,

📁 프로젝트 구조 예시

my-spring-app/
├── Dockerfile
├── docker-compose.yml
├── src/...
└── ...

1️⃣ Dockerfile (Spring Boot용)

# Base image
FROM openjdk:17-jdk-slim

# Set working directory
WORKDIR /app

# Copy jar file (빌드 후 jar가 생긴다는 가정)
COPY target/myapp.jar app.jar

# Expose port
EXPOSE 8080

# Run the app
ENTRYPOINT ["java", "-jar", "app.jar"]

2️⃣ docker-compose.yml

version: '3.8'

services:
  app:
    build: .
    container_name: spring-app
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
    networks:
      - spring-net

  db:
    image: mysql:8.0
    container_name: mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    networks:
      - spring-net

networks:
  spring-net:

3️⃣ application.properties 또는 application.yml

spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
spring.jpa.hibernate.ddl-auto=update

이렇게 환경변수로 값을 받아서 도커 환경에 맞게 자동 설정되도록 만들 수 있다.


✅ 실행 방법

  1. 프로젝트를 빌드 (예: mvn package)
  2. 아래 명령어 실행:
docker-compose up --build

그러면:

  • MySQL 컨테이너가 먼저 실행되고
  • Spring Boot 애플리케이션이 컨테이너에서 실행되면서 DB에 연결된다.

🧹 종료 방법

docker-compose down

필요 시 -v 옵션으로 볼륨까지 삭제 가능:

docker-compose down -v
profile
꾸준한 공부만이 답이다

0개의 댓글