티스토리 뷰

SpringBoot 애플리케이션을 Undertow 기반으로 실행하고 Docker로 배포하는 방법을 단계별로 정리했습니다. 이 가이드를 따라 하면 간단히 Docker 컨테이너 환경에서 애플리케이션을 실행할 수 있습니다.

 

1. 프로젝트 설정

1.1. Gradle 설정

build.gradle 파일에서 Undertow 및 Docker 빌드를 위한 플러그인을 설정합니다.

# build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.4.0'
	id 'io.spring.dependency-management' version '1.1.6'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-undertow'
    implementation 'org.springframework.boot:spring-boot-starter'
}

bootJar {
    archiveFileName = 'my-api.jar'
}

1.2. 포트 설정

# application.yml

server:
  port: 33000

 

2. Dockerfile 작성

# 1. OpenJDK 기반 이미지 사용
FROM amazoncorretto:23

# 2. 애플리케이션 JAR 복사
ARG JAR_FILE=build/libs/my-api.jar
COPY ${JAR_FILE} app.jar

# 3. 애플리케이션 실행 명령
ENTRYPOINT ["java", "-jar", "/app.jar"]

# 4. 컨테이너 포트 노출
EXPOSE 33000
  • 루트 디렉터리에 Dockerfile 을 작성합니다.

 

3. Docker 빌드 및 실행

3.1. Docker 이미지 생성

docker build -t my-api-app .
  • my-api-app 이라는 이름으로 이미지를 생성하였습니다.

3.2. Docker 컨테이너 실행

docker run -d -p 33000:33000 -e SPRING_PROFILES_ACTIVE=dev --name my-api-container my-api-app
  • Active Profile 을 지정하여 컨테이너를 실행합니다.

 

4. Gradle 로 Docker 관리

task dockerBuild(type: Exec) {
    commandLine 'docker', 'build', '-t', 'my-api-app', '.'
}

task dockerRun(type: Exec) {
    commandLine 'docker', 'run', '-d', '-p', '33000:33000', '-e', 'SPRING_PROFILES_ACTIVE=dev', '--name', 'boss-api-container', 'boss-api-app'
}

task dockerStopAndRemove(type: Exec) {
    doFirst {
        exec {
            commandLine 'docker', 'stop', 'my-api-container'
        }
        exec {
            commandLine 'docker', 'rm', 'my-api-container'
        }
    }
}

task fullDeploy {
    dependsOn dockerBuild, dockerStopAndRemove, dockerRun
}
  • Gradle 명령어를 통해 배포를 자동화합니다.
# Docker 이미지 빌드:
./gradlew dockerBuild
# Docker 컨테이너 실행:
./gradlew dockerRun
# 전체 배포(빌드, 기존 컨테이너 삭제, 새 컨테이너 실행):
./gradlew fullDeploy

 

감사합니다.

최근에 올라온 글
Total
Today
Yesterday