Spring Boot 프로젝트 Gradle로 Docker 이미지 빌드하기
Spring Boot 프로젝트를 Gradle로 빌드한 후 Docker 이미지를 생성하고 실행하는 방법입니다.
테스트 환경
운영체제 정보
systeminfo | findstr "OS 이름"
OS 이름: Microsoft Windows 11 Pro
Gradle 버전 확인
gradlew --version
------------------------------------------------------------
Gradle 7.6
------------------------------------------------------------
Build time: 2022-11-25 13:35:10 UTC
Revision: daece9dbc5b79370cc8e4fd6fe4b2cd400e150a8
Kotlin: 1.7.10
Groovy: 3.0.13
Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM: 17.0.5 (Oracle Corporation 17.0.5+9-LTS-191)
OS: Windows 11 10.0 amd64
1. 수동으로 애플리케이션 빌드 후 Docker 이미지 생성
가장 기본적인 방법으로 Spring Boot 애플리케이션을 빌드한 후 Dockerfile을 이용하여 이미지 생성합니다.
1.1 애플리케이션 빌드
gradlew build
빌드가 완료되면 다음 경로에 실행 파일이 생성됩니다.
build/libs/demo-0.0.1-SNAPSHOT.jar
1.2 Dockerfile 생성
프로젝트 루트에 Dockerfile을 생성합니다.
Dockerfile
FROM openjdk:17.0.2-jdk
ENV APP_HOME=/apps
ARG JAR_FILE_PATH=build/libs/demo-0.0.1-SNAPSHOT.jar
WORKDIR $APP_HOME
COPY $JAR_FILE_PATH app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
1.3 Docker 이미지 빌드
docker build --tag anti1346/dockerforspringboot:0.0.1 .
1.4 Docker 이미지 확인
docker images --filter=reference="anti1346/dockerforspringboot:0.0.1"
1.5 Docker 컨테이너 실행
docker run -d -p 8080:8080 anti1346/dockerforspringboot:0.0.1
브라우저 또는 curl로 확인합니다.
curl localhost:8080
2. Docker Multi-Stage 빌드
Multi-Stage 빌드는 빌드 환경과 실행 환경을 분리하여 Docker 이미지 크기를 줄이는 방법입니다.
2.1 Dockerfile 생성
Dockerfile
FROM gradle:7.6-jdk17-alpine as build
ENV APP_HOME=/apps
WORKDIR $APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME
COPY gradle $APP_HOME/gradle
RUN chmod +x gradlew
RUN ./gradlew build || return 0
COPY src $APP_HOME/src
RUN ./gradlew clean build
FROM openjdk:17.0.2-jdk
ENV APP_HOME=/apps
ARG ARTIFACT_NAME=app.jar
ARG JAR_FILE_PATH=build/libs/demo-0.0.1-SNAPSHOT.jar
WORKDIR $APP_HOME
#COPY --from=build /apps/build/libs/demo-0.0.1-SNAPSHOT.jar app.jar
COPY --from=build $APP_HOME/$JAR_FILE_PATH $ARTIFACT_NAME
EXPOSE 8080
#ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
ENTRYPOINT ["java", "-jar", "app.jar"]
Multi-Stage 빌드 특징
- Build Stage : Gradle로 애플리케이션 빌드
- Runtime Stage : 실행에 필요한 JAR만 복사
- 장점 : 이미지 크기 감소 및 보안 향상
2.2 Docker 이미지 빌드
docker build --tag anti1346/multistagebuildforspringboot:0.0.1 .
2.3 이미지 확인
docker images --filter=reference="anti1346/multistagebuildforspringboot:0.0.1"
2.4 컨테이너 실행
docker run -d -p 8080:8080 anti1346/multistagebuildforspringboot:0.0.1
테스트
curl localhost:8080
Hello World! ==> Multi-Stage Build
3. Gradle(Spring Boot Plugin)로 Docker 이미지 빌드
Spring Boot에서는 bootBuildImage Task를 사용하여 Dockerfile 없이 이미지 생성이 가능합니다.
이 기능은 Cloud Native Buildpacks를 기반으로 합니다.
3.1 Gradle Plugin 설정
build.gradle에 Docker Plugin을 추가합니다.

plugins {
id 'java'
id 'org.springframework.boot' version '3.0.1'
id 'io.spring.dependency-management' version '1.1.0'
id "com.palantir.docker" version "0.34.0"
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
3.2 Docker 이미지 빌드
기본 이미지 생성
gradlew clean bootBuildImage
이미지 이름 지정
gradlew clean bootBuildImage --imageName=anti1346/bootbuildimageforspringboot:0.0.1
3.3 Docker 이미지 확인
docker images --filter=reference="anti1346/bootbuildimageforspringboot:0.0.1"
3.4 컨테이너 실행
docker run -d -p 8080:8080 anti1346/bootbuildimageforspringboot:0.0.1
테스트
curl localhost:8080
Hello World! ==> Boot Build Image
4. Docker 이미지 빌드 방법 비교
| 방법 | 특징 | 장점 |
| Dockerfile 방식 | 가장 기본적인 방법 | 설정이 단순 |
| Multi-Stage 빌드 | 빌드와 실행 환경 분리 | 이미지 크기 감소 |
| bootBuildImage | Dockerfile 필요 없음 | CI/CD 자동화에 유리 |
참고URL
- Spring Boot Docker : https://spring.io/guides/topicals/spring-boot-docker/
- Dockerfile reference : https://docs.docker.com/engine/reference/builder/
- com.palantir.docker : https://plugins.gradle.org/plugin/com.palantir.docker
- gradle : https://hub.docker.com/_/gradle/tags?page=1&name=jdk17-al
'원도우' 카테고리의 다른 글
| [draft] PuTTY를 사용하여 EC2 인스턴스에 키 페어로 접근하는 방법 (1) | 2026.03.10 |
|---|---|
| [draft] 원도우 11에서 WSL을 사용하여 우분투를 실행하고 SSH 서버를 활성화하는 방법 (0) | 2026.03.10 |
| [draft] 윈도우 11에서 Docker를 설치하는 방법 (0) | 2026.03.08 |
| [draft] Docker Buildx를 사용하여 이미지를 빌드하는 방법 (0) | 2026.03.07 |
| [draft] 원도우 11에 Oh My Posh를 설치하고 테마를 적용하는 방법 (0) | 2026.03.07 |