Jib

  • 애플리케이션을 컨테이너 이미지로 패키징하는 모든 단계를 빠르게 처리하는 컨테이너 이미지 빌더다.
  • Dockerfile을 작성하거나 도커를 따로 설치할 필요가 없다.
  • Maven, Gradle 플러그인으로 동작한다.
  • 플러그인 정의하고 타겟 이미지에 대한 설정, 빌드에 대한 정의를 하면 Java Application을 컨테이너화 할 수 있다.

https://cloud.google.com/java/getting-started/jib?hl=ko

  • 출처: https://cloud.google.com/java/getting-started/jib?hl=ko

kotlin plugin

plugins {
    id("com.google.cloud.tools.jib' version '3.4.4")
}

jib configuration

필드 클로저 파라미터 변수 타입 기본 값 설명
to     to required 구축할 대상 이미지
  image   String eclipse-temurin 기본 이미지에 대한 참조
  tags   List   푸시할 태그
  credHelper   String   대상 이미지를 푸시하는 것을 인증할 수 있는 자격 증명 도우미를 지정
  auth   auth   자격 증명 직접 지정
    username String   아이디
    password String   비밀번호
from     from   기본 이미지
  image   String eclipse-temurin 기본 이미지에 대한 참조
  credHelper   String   대상 이미지를 푸시하는 것을 인증할 수 있는 자격 증명 도우미를 지정
  auth   auth   자격 증명 직접 지정
    username String   아이디
    password String   비밀번호
container     container   빌드된 이미지의 도커 설정
  appRoot   String /app 앱 콘텐츠가 있는 루트 디렉토리
  args   List   컨테이너 시작하기 위해 명령에 추가된 추가 프로그램 인수 (Docker의 CMD와 유사)
  entrypoint   List   도커의 entrypoint와 유사
  environment   Map<String, String>   컨테이너 환경 변수
  jvmFlags   List   JVM 플래그
  labels   Map<String, String>   이미지 메타데이터를 적용하기 위한 key-value
  ports   List   EXPOSE 될 포트
  volumes   List   컨테이너 마운트 포인트
  workingDirectory   String   컨테이너 작업 디렉토리
  user   String   컨테이너 운용 할 사용자 그룹
extraDirectories     extraDirectories   이미지에 추가할 임의의 디렉토리
outputPaths     outputPaths   Jib에 의해서 생성된 추가 빌드 아티팩트의 위치 구성
containerizingMode     String exploded package로 설정하면 Gradle Java 플러그인에 의해 구축된 JAR 아티팩트를 최종 이미지에 넣습니다.
exploded(기본값)로 설정하면 개별 .class 파일과 리소스 파일을 컨테이너화합니다.
allowInsecureRegistries     boolean false true면 https 인증서 오류를 무시합니다.

예시

jib {
  from {
    image = "openjdk:alpine"
  }
  to {
    image = "localhost:5000/my-image/built-with-jib"
    credHelper = "osxkeychain"
    tags = setOf("tag2", "latest")
  }
  container {
    jvmFlags = listOf("-Dmy.property=example.value", "-Xms512m", "-Xdebug")
    mainClass = "mypackage.MyApp"
    args = arrayOf("some", "args")
    ports = listOf("1000", "2000-2003/udp")
    labels = mapOf("key1" to "value1", "key2" to "value2")
    format = "OCI"
  }
}