Docker

Jib - 자바 app 컨테이너화

구티맨 2022. 9. 28. 11:46

Jib 란?

Jib는 도커 데몬 없이 Java 앱의 OCI 이미지( 도커 이미지 )로 만들어주는 플러그인 입니다.

 

Maven, Gradle과 함께 사용할 수 있습니다.

 

그럼 기존의 Docker 빌드로 이미지를 생성하는 것과 Jib 빌드로 이미지를 생성하는 것을 비교해 보겠습니다.

 

Docker에서는 Dockerfile을 정의를 하고, docker build 명령으로 도커 이미지를 만들게 됩니다.

 

자바 앱의 경우에는 자바 소스를 빌드하여 jar, war를 생성 한 뒤에 Dockerfile에 이 파일을 이용하여 도커 이미지를 만들게 됩니다.

 

언뜻 보면 간단해 보이지만, 이를 자동화 하기에는 조금 번거로운 것이 사실입니다.

 

이를 개선하기 위해 Jib가 만들어졌으며, 위의 그림에서 보듯이 Dockerfile 없이 아래 jib 명령 하나로 바로 이미지를 만들 수 있습니다.

 

gradlew jib

 

Jib 설정하기

build.gradle에 jib plugin을 추가해 줍니다.

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

그리고, jib 설정을 from, to, container 클로저에 해주면 됩니다.( 클로저 설명 )

jib {
    from {
        image = 'openjdk:8-jre-alpine'
    }
    to {
        image = "img/target-image"
        tags = [project.version, 'latest'] as List<String>
    }
    container {
        jvmFlags = ['-verbose:gc', '-XX:+PrintGCDetails', '-XX:+PrintGCTimeStamps', '-XX:+PrintGCDateStamps']
    }
}

from : base image의 이미지 레퍼런스를 명시해 줍니다.( 설명 링크 )

to : 앱을 빌드 후 생성되는 타겟 이미지 이름을 설정합니다. ( 설명 링크 )

container : 빌드된 이미지를 실행하는 컨테이너를 설정합니다. ( 설명 링크 )

 

위와 같이 설정을 하고 gradlew jib를 수행하게 되면, 이미지를 생성하고 이를 저장소에 푸시합니다.