정의
JIB은 Java 컨테이너 이미지 빌더로, Java 애플리케이션을 Dockerfile 없이 손쉽게 Docker 이미지로 빌드할 수 있도록 도와주는 Google에서 개발한 오픈소스 도구이다. Maven 또는 Gradle 플러그인으로 제공되며, JVM 기반 애플리케이션을 컨테이너화할 때의 복잡함을 줄여준다.
사용법
말그대로 플러그인이기 때문에 기존에 이미지를 빌드하기 위해서 Docker Daemon이나 DockerFile을 필요로 하지 않는다. 간단하게 아래 Gradle에서 진행할 수 있다.
Gradle에서의 JIB 활용법
plugins {
id("com.google.cloud.tools.jib") version "3.4.0"
}
jib {
to {
image = "your-repo/your-app"
}
}
빌드 명령어
./gradlew jib
또한 이미지는 Google Container Registry (GCR), DockerHub, Amazon ECR 등으로 바로 이미지를 푸시할 수 있다.
즉 CICD(이미지 빌드 과정 및 HUB 등록 과정)을 정말 빠르고 간단하게 지원해준다.
JIB가 빠른 이유
JAVA Application에서 JIB가 빠른 이유는 아래와 같다.
1. 레이어 캐싱 최적화(Layered Image Building)
JIB는 Docker 이미지의 레이어를 다음처럼 세분화하여 구성한다.
- dependencies/ (외부 라이브러리)
- resources/ (정적 리소스)
- classes/ (애플리케이션 클래스 파일)
- jars/, META-INF/ 등
좀 더 쉽게 말하면, 이미지의 레이어 즉 Spring Boot 기준으로 변경된 레이어의 코드만 다시 재빌드 하기 때문에 속도 차이에서 엄청나게 큰 차이가 있다.
2. DockerFile 없이도 작동 가능
- Dockerfile을 만들고 Docker 빌드 명령을 실행할 필요가 없다
- JIB는 Maven/Gradle 플러그인에서 직접 이미지 빌드를 수행
- Docker 데몬도 불필요하기 때문에 클린한 CI/CD 환경에서도 훨씬 빠르게 동작
3. 중간단계 없는 레지스트리 Push
- JIB는 이미지 파일을 디스크에 저장하지 않고, 바로 컨테이너 레지스트리에 Push한다
- docker build → docker tag → docker push의 3단계가 아니라, 바로 push하기 때문에 훨씬 빠르게 작동한다.
Docker Build와 JIB의 속도차이를 직접 비교해본 적이 있는데, 아래 포스팅 참고!
https://what2dochris.tistory.com/17
Git ACTIONS: Gradle Plugin JIB 빌드 VS Docker Build
얼마전 깃허브에서 프로젝트를 관리하면서 GIt actions로 CICD workflows를 구축하고 빌드를 했었다.처음에는 가장 간단하고 기본적인 도커 명령어를 사용해서 빌드를 했었는데, 문제는 시간이 너무나
what2dochris.tistory.com
결론
JIB는 확실히 일반 Docker Build, Docker Cache Build와 비교했을 때 많은 이점이 있다.
다만, JVM 애플리케이션에서만 사용가능하다는 점과 모순적이지만 Docker를 사용할 수 없기에 Docker Compose 와 같은 Docker Network 기능을 사용하기가 매우 어렵다. 그래도 최근 가장 많이 사용되는 Spring Boot 와 같은 JVM에서는 최적화되어 사용가능하니 매우 활용도가 높다고 생각한다.
참고자료
https://cloud.google.com/java/getting-started/jib
Building Java containers with Jib | Google Cloud
This tutorial shows how to use Jib to build an optimal Java container and deploy to Cloud Run
cloud.google.com
'DevOps&Cloud' 카테고리의 다른 글
ArgoCD Sync Policy와 Sync 방식 (0) | 2025.05.03 |
---|---|
NAT(Network Address Translation) 이란 무엇이고 왜 필요한지 (0) | 2025.05.01 |
Elastic Search 이해하기(Elastic Search vs RDBMS) (1) | 2025.04.26 |
Kubernetes Architecture: Control Plane 과 Worker Node 이해하기 (0) | 2025.04.23 |
Helm이란? (0) | 2025.04.23 |