공부가 싫은 개발자
[Docker] 스프링부트 도커에 올리기 본문
MAC, 인텔리제이, Gradle 기준!
1️⃣ 인텔리제이에서 터미널을 켜고, 프로젝트의 루트로 경로 이동
2️⃣ Spring Boot JAR 만들기
- 권한이 없는 경우: chmod +x gradlew
- 있는 경우: ./gradlew clean build
성공하면 다음과 같이 파일 생성됨
build/libs/xxx.jar
3️⃣ Dockerfile 작성 (⭐ 핵심)
- 프로젝트 루트에 Dockerfile 생성
FROM eclipse-temurin:21-jdk-alpine
WORKDIR /app
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
왜 이 이미지?
- eclipse-temurin → 가장 안정적인 OpenJDK
- jre → 빌드용 JDK 불필요 (이미 JAR 있음)
- Java 21 완벽 지원
근데 나는 다음과 같이 멀티 스테이지 Dockerfile (이미지 용량 ↓) 로 작성함
# Stage 1: Build the application
FROM gradle:8.8-jdk21-alpine AS builder
WORKDIR /app
# Copy only necessary files to leverage Docker cache
COPY build.gradle settings.gradle gradlew ./
COPY gradle ./gradle
# Download dependencies
RUN ./gradlew dependencies
# Copy the rest of the source code
COPY src ./src
# Build the application, skipping tests
RUN ./gradlew bootJar -x test
# Stage 2: Create the final, smaller image
FROM eclipse-temurin:21-jre
WORKDIR /app
# Copy the built JAR from the builder stage
COPY --from=builder /app/build/libs/*.jar app.jar
# Expose the default Spring Boot port
EXPOSE 8080
# Run the application
ENTRYPOINT ["java", "-jar", "app.jar"]
4️⃣ Docker 이미지 빌드
backend에 본인 프로젝트 파일명 적으면 됨
docker build -t backend .
그리고 확인
docker images
5️⃣ 컨테이너 실행
docker run -d \
-p 8080:8080 \
--name backend \
backend
로그 확인 (👉 Spring Boot 뜨는 로그 나오면 성공):
docker logs -f backend