728x90

jib 란?

 

Jib는 Dockerfile을 사용하지 않거나 Docker를 설치할 필요 없이 컨테이너를 빌드할 수 있도록 도와주는 도구이다.

특히 자바 컨테이너를 빌드하는 데 사용하는 도구이며, Maven과 Gradle 용 플러그인을 이용해 사용할 수도 있고 Jib 자바 라이브러리를 통해 사용할 수도 있다.

 

적용해보기

 

build.gradle.kts

plugin {
...
id("com.google.cloud.tools.jib") version "3.1.2" apply false
...
}

 

버전은 해당 spring boot, kotlin, java 버전에 맞게 설정 이 필요하다.

 

val stage: String? by project // github action 에서 -Pstage=alpha 옵션으로 주입
val imageTag: String? by project // github action 에서 -PimageTag=AA-BB 옵션으로 주입
jib {
from {} // 애플리케이션을 빌드할 기본 이미지를 구성
to {} // 애플리케이션을 빌드할 대상 이미지를 구성
extraDirectories {} // 이미지에 임의의 파일을 추가하는 데 사용되는 디렉토리를 구성
container {} // 빌드된 이미지에서 실행되는 컨테이너를 구성
mainClass = ""
user = ""
ports = "" // Dockerfile 의 EXPOSE 와 유사
creationTime = "" // 컨테이너 생성 시간을 설정
}

 

github action 에서 환경과 imageTag 이름을 주입하기 위해 따로 변수를 생성한다.

 

github action

- name: Build tag, and push image with jib
id: build-image
run: |
./gradlew -PcontainerImage=${{ env.DOCKER_REPOSITORY }} -PimageTag=${{ env.IMAGE_TAG }} -Pstage=${{ env.PHASE }} jib --no-daemon

 

 

테스트 환경에서는 ECR 을 사용하여 docker image 를 관리하고 jib 에 다음과 같이 설정했다.

credHelper = "ecr-login"

 

jvm custom option

container {
jvmFlags = when (stage) {
"dev" -> listOf("-Xms4g", "-Xmx4g")
"prod" -> listOf("-Xms8g", "-Xmx8g")
else -> emptyList()
}
environment = mapOf("port" to 8080)
mainClass = mainClassPath
user = "user"
ports = listOf(8080)
creationTime = containerCreationTime
}

 

이런 식으로 튜닝도 가능하다.

 

체감상 docker build 에서 jib 로 바꾼뒤 캐시가 적중했을때 1분 가까이 차이가 나기도 한다.

728x90