관리 메뉴

공부가 싫은 개발자

[Docker] 스프링부트 도커에 올리기 본문

인프라

[Docker] 스프링부트 도커에 올리기

우엉엉 2025. 12. 15. 17:31

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