docker

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

KUKJIN LEE
KUKJIN LEE
2025년 2월 17일
228

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}
#docker compose#docker compose 설치#docker-compose 사용법#docker-compose.yml 작성법#docker-compose.yml 실행