본문 바로가기
BackEnd/Project

[Loan] Ch07. JIB를 통한 Docker 이미지 생성

by 개발 Blog 2024. 9. 14.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

JIB

https://github.com/GoogleContainerTools/jib

JIB는 Java 애플리케이션에 최적화된 Docker 및 OCI 이미지를 빌드해 주는 툴이다. 이를 사용하여 Dockerfile 없이도 쉽게 Java 애플리케이션의 Docker 이미지를 생성할 수 있다.

 

실습

1. MySQL 데이터베이스 설정

  • 기존 H2에서 MySQL로 데이터베이스를 변경하기 위해 MySQL에 loan 데이터베이스를 생성한다.

 

2. build.gradle 설정

JIB 플러그인을 사용하기 위해 build.gradle 파일에 다음과 같이 코드를 추가한다.

plugins {
	...
	id 'com.google.cloud.tools.jib' version '3.2.0'
}

jib{
    from {
        image = 'openjdk:17-slim'
    }
    to{
        image = 'loan'
        tags = ['0.0.1']
    }
    container{
        mainClass = 'com.example.loan.LoanApplication'
        creationTime = 'USE_CURRENT_TIMESTAMP'
        format = 'OCI'
        volumes = ['/var/tmp']
        entrypoint = ['java'
        , '-cp', '/app/resources:/app/classes:/app/libs/*'
        , 'com.example.loan.LoanApplication'
        ]

    }
}

 

3. application.yaml 설정

MySQL 데이터베이스 설정을 추가한다.

server:
  port: 8080
spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://host.docker.internal:3306/loan?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
    username: root
    password: 1234
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect
      naming:
        physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
    database-platform: org.hibernate.dialect.MySQL8Dialect
    database: mysql
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
      location: #/Users/eunchan/Desktop/loan
logging.level:
  org.hibernate.SQL: debug

 

4. Docker 이미지 빌드

Gradle Tasks에서 jibDockerBuild를 실행하여 Docker 이미지를 빌드한다.

 

5. Docker 이미지 확인

빌드된 이미지를 확인하기 위해 아래 명령어를 실행한다.

 

6. 컨테이너 실행

생성한 이미지를 이용해 컨테이너를 실행한다.

 

7. JPA 테이블 확인

MySQL에서 loan 데이터베이스의 테이블을 확인하면, JPA가 생성한 테이블 목록을 볼 수 있다:

이렇게 JIB를 통해 Docker 이미지를 생성하고 어플리케이션을 정상적으로 띄웠다. 추가적으로 H2에서 MySQL로 데이터베이스 변경 작업까지 마무리했다. 이를 통해 효율적인 빌드와 배포 환경을 구축할 수 있었다.