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

KUKJIN LEE • 3일 전 작성
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}