Docker Compose를 통해 여러 컨테이너 한 번에 실행하는 방법

KUKJIN LEE's profile picture

KUKJIN LEE3일 전 작성

Docker Compose란?

Docker를 사용하면 하나의 컨테이너를 실행하는 것은 쉽지만, 애플리케이션은 보통 여러 개의 서비스(컨테이너)가 함께 동작해야 합니다.

예를 들어, Spring Boot 애플리케이션 + MySQL 데이터베이스를 실행한다고 가정해 봅시다.
각각을 개별적으로 실행하면 설정이 번거롭고 관리하기 어렵습니다.
✅ 이를 해결하는 것이 바로 Docker Compose입니다!

Docker Compose를 사용하면 여러 개의 컨테이너를 하나의 설정 파일(docker-compose.yml)로 관리할 수 있습니다.
한 번의 명령어(docker-compose up)로 여러 컨테이너를 실행하고, 네트워크를 자동으로 설정해줍니다.

 

Docker Compose를 사용하면 좋은 점

✔️ 여러 개의 컨테이너를 한 번에 실행 가능
✔️ 설정을 코드(docker-compose.yml)로 관리하여 재사용 가능
✔️ 각 컨테이너의 환경 변수와 네트워크를 쉽게 설정 가능

 

Spring Boot + MySQL을 Docker Compose로 실행해보기

🔹 docker-compose.yml 파일 작성

이제 프로젝트 폴더 안에 docker-compose.yml 파일을 만들고, 아래 내용을 작성하세요.

📌 설정 파일 설명

  • app 서비스는 Spring Boot 애플리케이션

  • database 서비스는 MySQL 데이터베이스

version: '3.8'
services:
  database:
    image: mysql:8.0
    container_name: mysql-container
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
  app:
    build: .
    container_name: spring-app
    depends_on:
      - database
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://database:3306/testdb
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: password
    ports:
      - "8080:8080"

설명:

  • database: MySQL 컨테이너 실행

  • app: Spring Boot 애플리케이션 실행 (MySQL과 연결)

  • depends_on: database가 먼저 실행된 후 app이 실행되도록 설정

  • 환경 변수(environment)를 사용해 데이터베이스 설정을 관리

 

🔹 Spring Boot 애플리케이션 Dockerfile 작성

이제 Dockerfile을 만들어 Spring Boot 애플리케이션을 컨테이너에서 실행할 수 있도록 설정합니다.

📌 프로젝트 루트 디렉터리에 Dockerfile 파일을 만들고 다음 내용을 작성하세요.

# 1. OpenJDK 기반 이미지 사용
FROM openjdk:17-jdk-slim

# 2. 작업 디렉토리 설정
WORKDIR /app

# 3. JAR 파일을 컨테이너로 복사
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# 4. 애플리케이션 실행
CMD ["java", "-jar", "app.jar"]

이제 Spring Boot 애플리케이션을 빌드하면 됩니다!


🔹 애플리케이션 빌드 및 실행

Spring Boot 빌드합니다.

./mvnw clean package

Docker Compose를 사용하여 모든 컨테이너 실행

docker-compose up -d

이제 MySQL과 Spring Boot 서버가 함께 실행됩니다!
http://localhost:8080에 접속하면 애플리케이션이 동작하는 것을 확인할 수 있습니다.

 

환경 변수 활용 .env 파일로 설정 관리하기

Docker Compose에서 환경 변수를 파일로 관리하면 설정 변경이 쉬워집니다.
📌 .env 파일을 생성하고 다음 내용을 추가합니다.

MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=testdb
MYSQL_USER=user
MYSQL_PASSWORD=password

📌 docker-compose.yml에서 환경 변수를 참조하도록 수정합니다.

${} 사용하면 환경 변수를 사용할 수 있습니다.

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  MYSQL_DATABASE: ${MYSQL_DATABASE}
  MYSQL_USER: ${MYSQL_USER}
  MYSQL_PASSWORD: ${MYSQL_PASSWORD}

New Tech Posts