Step 1. Spring Boot JAR 파일 빌드
우선 배포할 프로젝트의 루트 디렉토리로 이동한다.
그리고 Docker 이미지를 생성하기 전에 Gradle을 이용하여 Spring Boot 프로젝트를 실행 가능한 JAR 파일로 빌드한다.
./gradlew clean bootJar
- clean: 기존 빌드 결과 삭제
- bootJar: Spring Boot 실행 가능한 JAR 파일 생성
빌드가 정상적으로 완료되면 build/libs 폴더에
todolist-0.0.1-SNAPSHOT.jar
와 같이 JAR 파일이 생성될 것이다.
Step 2. Dockerfile 작성
todolist/Dockerfile
# Java 21 실행 환경
FROM eclipse-temurin:21-jre
# 컨테이너 내부 작업 디렉터리
WORKDIR /app
# Gradle 빌드 결과물 복사
COPY build/libs/*.jar app.jar
# Spring Boot 포트
EXPOSE 8080
# Spring Boot 실행
ENTRYPOINT ["java", "-jar", "app.jar"]
이 Dockerfile에서는 build/libs/ 디렉터리에 JAR 파일이 하나만 존재한다고 가정한다.
| 명령어 | 역할 |
| FROM | Java 21 JRE 기반 이미지 사용 |
| WORKDIR | 컨테이너 내 /app 디렉터리 설정 |
| COPY | 로컬 JAR 파일을 컨테이너로 복사 |
| EXPOSE | 애플리케이션 포트 8080 명시 |
| ENTRYPOINT | 컨테이너 시작 시 JAR 실행 |
Step 3. compose.yaml 생성
todolist/compose.yaml
services:
app:
build: .
image: todolist:1.0
container_name: todolist-container
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://host.docker.internal:3306/spring_study
SPRING_DATASOURCE_USERNAME: spring
SPRING_DATASOURCE_PASSWORD: spring1234
JWT_SECRET: "${JWT_SECRET}"
- app: Spring Boot 서비스 이름
- build: .: 현재 폴더의 Dockerfile로 이미지 빌드
- image: 이미지 이름과 태그
- container_name: 컨테이너 이름
- ports: 호스트와 컨테이너의 포트 연결 (호스트:컨테이너)
- environment: 컨테이너에서 실행되는 애플리케이션에 환경변수를 전달한다.
환경 변수 부분은 로컬 호스트에서 실행중인 MySQL에 연결하는 부분이다.
Step 4. 프로젝트 빌드 및 실행
우선 프로젝트를 실행하기 전에 JWT키를 설정한다.
터미널에서
export JWT_SECRET="$(openssl rand -base64 32)"
그리고 다음 명령어를 실행하면
docker compose up -d --build
Docker Compose가 Dockerfile을 읽어 이미지를 빌드하고 컨테이너를 실행한다.
'개발 > Spring Boot' 카테고리의 다른 글
| [Spring Boot] JWT(JSON Web Token) (0) | 2026.10.08 |
|---|---|
| [Spring Boot] Spring Security (0) | 2026.10.06 |
| [Spring Boot] CRUD + DTO + Validation + 예외 처리 (0) | 2026.10.06 |
| [Spring Boot] Service + DI + JPA + MySQL (0) | 2026.10.03 |
| [Spring Boot] Spring Boot + MySQL 실습 환경 세팅 (0) | 2026.10.02 |