Jib이란?

왜 Jib는 등장하게 되었는가?

  • 우리가 그동안 도커 이미지를 만들기 위해 무슨 일들을 했을까?
    • 구글에 Java Docker Image 생성하는 법을 찾아본다.
      • 열심히 DockerFile을 작성한다.
      • 우분투를 받고 -> 자바를 다운받고 -> 어플리케이션을 빌드하고 -> 실행한다.
    • 조금 더 빠르게 작성해볼까?
      • 설치하지 않고 openjdk이미지를 가져와서 빌드된 jar를 복사하게 작성한다.
      • 복잡한 과정이 단순하게 만들었다.
    • 하지만 openjdk 이미지 용량이 큰게 문제가 된다.
      • alpine이라는 이미지를 활용해보자. -> 용량이 줄었다.
      • DockerFile을 최적화하기 위해 문서를 읽는다. - 문서
    • .dockerignore를 열심히 작성한다.
      • !target/something-*.jar
    • 조금 더 개선하여 빌드된 dependencies들을 따로 분리해서 저장한다.
      • 분리된 의존성을 하나의 Layer로 관리한다.
      • 최대한 Cache를 활용하여 Dockerfile을 작성한다.
    • Maven Plugin을 활용한다.
  • 이 모든 과정이 복잡하고.. 학습난이도도 높고.. 난 그저 단순히 Containerizing하고 싶다.

    그래서 이 복잡한 과정을 단순하게 만들기 위해 만든게 Jib이다.

Jib란?

  • Containerize your Java application.
  • 플러그인 적용하고. jib를 실행하면 된다.
  • 마치 Container의 compiler와 같은 역할이라고 볼 수 있다.

Goals

  • Fast
    • 어플리케이션을 Multiple Layer로 분리하여 이미지를 빌드한다.
    • 변경된 사항만 이미지 빌드에 반영되기 때문에 아주 빠르다.
  • Reproducible
    • 동일한 컨텐츠로 이미지를 빌드하면 항상 같은 이미지를 만들게 된다.
    • 불필요한 업데이트는 발생하지 않는다.
  • Daemonless
    • Docker Image를 Maven, Gradle와 같은 빌드 툴을 통해 만들 수 있다.
    • 더이상 Dockerfile이나 Docker build/push와 같은 액션이 필요없게 된다.

Jib Base Image는?

Getting Started

plugins {
  id 'com.google.cloud.tools.jib' version '2.6.0'
}
gradle jib - build image
gradle jibDockerBuild - Docker daemon를 활용한 빌드

Multi Module Example

Jib를 사용하면서 겪었던 문제들

  • jib에서 만드는 컨테이너 이미지에 *를 사용함으로써 classpath ordering이 바뀌게될 수 있는 상황 -> 최신 버젼을 사용하면 해결된다.(java version 11 up)
    • https://github.com/GoogleContainerTools/jib/issues/2733

Reference

0%