Spring Boot 애플리케이션 Docker로 빌드 및 실행하기
이번 포스팅에서는 Spring Boot 백엔드 애플리케이션을 Docker를 이용해 빌드하고 컨테이너화하여 실행하는 과정을 정리합니다.
1. Maven 설정 및 Jib 플러그인 추가
먼저 pom.xml
에 Jib 플러그인을 추가하여 도커 이미지를 생성하도록 설정합니다.
pom.xml 예시
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0</version>
</parent>
<groupId>com.example</groupId>
<artifactId>licensing-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>License Service</name>
<description>Example Licensing Service</description>
<properties>
<java.version>17</java.version>
<docker.username>your-dockerhub-username</docker.username>
<docker.password>your-dockerhub-password</docker.password>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<to>
<image>${docker.username}/licensing-service</image>
<auth>
<username>${docker.username}</username>
<password>${docker.password}</password>
</auth>
</to>
</configuration>
</plugin>
</plugins>
</build>
</project>
🔒 주의사항:
- 실제 Docker Hub 아이디와 비밀번호는 위 코드에 입력하지 않고, 환경 변수 또는
maven settings.xml
파일을 통해 설정하는 것이 안전합니다.
2. Maven 빌드 및 Docker 이미지 생성
Maven 명령어를 사용해 Docker 이미지를 빌드하고 Docker Hub에 푸시합니다.
mvn clean package jib:build
결과:
target/
디렉토리에.jar
파일이 생성됩니다.- Jib 플러그인이 도커 이미지를 생성하고 Docker Hub에 푸시합니다.
3. Docker Compose 설정
Docker 이미지를 실행하기 위해 docker-compose.yml
파일을 작성합니다.
docker-compose.yml 예시
services:
licensingservice:
image: your-dockerhub-username/licensing-service:latest
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=dev
설명:
image
: Docker Hub에 푸시한 이미지 이름을 지정합니다.ports
: 컨테이너의 8080 포트를 로컬 8080에 매핑합니다.environment
: Spring Boot 프로파일을dev
로 설정합니다.
4. Docker Compose로 컨테이너 실행
아래 명령어로 Docker Compose를 실행합니다:
docker-compose up
5. API 테스트
Postman이나 브라우저를 이용해 애플리케이션의 API를 테스트합니다.
예시 요청:
POST 요청:
POST http://localhost:8080/v1/organization/123/license
요청 Body (JSON):
{ "licenseId": "123", "description": "Test License", "organizationId": "123", "productName": "Test Product", "licenseType": "trial" }
응답:
License created License(id=0, licenseId=123, description=Test License, organizationId=123, productName=Test Product, licenseType=trial)
6. 전체 흐름 요약
- Maven 빌드 (
mvn clean package
) →.jar
파일 생성 - Jib 플러그인 →
.jar
파일을 Docker 이미지로 변환하고 Docker Hub에 푸시 - docker-compose.yml → Docker 컨테이너 실행
- Postman 테스트 → 로컬
http://localhost:8080
에 요청을 보내서 API 테스트
결론
이렇게 Docker와 Maven Jib 플러그인을 활용하면 Spring Boot 애플리케이션을 컨테이너화하고 쉽게 배포할 수 있습니다.
Docker Compose를 통해 여러 환경에서도 손쉽게 테스트할 수 있어 개발과 배포가 훨씬 유연해집니다.
'Docker' 카테고리의 다른 글
Docker in Action Chapter 8 (1) | 2024.12.09 |
---|---|
Docker in Action Chapter 7 (0) | 2024.12.09 |
Docker in Action Chapter 6 (0) | 2024.12.09 |
Docker in Action Chapter 5 (0) | 2024.12.09 |
Docker in Action Chapter 4 (0) | 2024.12.09 |