Docker / / 2024. 12. 10. 17:08

Spring Boot 애플리케이션 Docker로 빌드 및 실행하기

Spring Boot 애플리케이션 Docker로 빌드 및 실행하기

이번 포스팅에서는 Spring Boot 백엔드 애플리케이션Docker를 이용해 빌드하고 컨테이너화하여 실행하는 과정을 정리합니다.


1. Maven 설정 및 Jib 플러그인 추가

먼저 pom.xmlJib 플러그인을 추가하여 도커 이미지를 생성하도록 설정합니다.

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. 전체 흐름 요약

  1. Maven 빌드 (mvn clean package) → .jar 파일 생성
  2. Jib 플러그인.jar 파일을 Docker 이미지로 변환하고 Docker Hub에 푸시
  3. docker-compose.yml → Docker 컨테이너 실행
  4. 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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유