Jib를 이용하여 자바 컨테이너 빌드
Jib란 ?
- Jib란 구글 클라우드 도구 jib를 이용하여 프로젝트 빌드와 동시에 컨테이너 이미지까지 만들어서 push까지 해주는 역할을 합니다.
Jib는 왜 사용하는가 ?
기존의 Docker 빌드 흐름은 아래와 같습니다.
Jib를 이용하면 JAVA 애플리케이션을 컨테이너 이미지로 구성하는 작업을 한 번에 해줍니다.
Dockerfile 작성 없이 간편하게 JAVA 애플리케이션을 컨테이너 이미지로 만들 수 있다는 장점이 있습니다.
Jib 설정하기
1. build.gradle에 plugin 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.0'
id 'io.spring.dependency-management' version '1.1.0'
id 'com.google.cloud.tools.jib' version '3.3.2' // 추가된 부분
}
2. build.gradle에 jib 관련된 설정 추가
- from: 애플리케이션을 컨테이너 이미지로 만들 때 사용하는 base image 지정
- to
- images: 생성된 컨테이너 이미지가 저장될 repository
- tags: 이미지에 설정될 태그
- container : 이미지가 컨테이너화 되어 실행될 때 설정할 java application 옵션
- jvmFlags : 메모리사이즈, 기본 프로필 설정 등등 가능
jib {
from {
image = "eclipse-temurin:17-jdk"
}
to {
image = "phj0860/rally-mate"
tags = ["latest"]
}
container {
creationTime = "USE_CURRENT_TIMESTAMP"
// jvmFlags = ["-Dspring.profiles.active=prod" ]
}
}
3. Jib 이용하여 dockerhub에 push
- dockerhub에 repository가 있다는 가정 하에 진행합니다.
- dockerhub repository 생성은 여기에서 할 수 있습니다.
3-1. docker login
$ docker login registry-1.docker.io
Username:
Password:
Authenticating with existing credentials...
Login Succeeded
3-2. gradlew jib
./gradlew jib
- gradle 빌드 실패 시에 java --version 확인 후 spring에 해당하는 java로 버전을 맞춥니다.
- 아래와 같은 오류 발생 시에 config.json 내용에서 credsStore 라인을 제거합니다.
# 오류
Execution failed for task ':jib'.
> com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException: Build image failed, perhaps you should make sure your credentials for 'registry-1.docker.io/library/eclipse-temurin' are set up correctly. See https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#what-should-i-do-when-the-registry-responds-with-unauthorized for help
# 해결
$ vim ~/.docker/config.json
# 아래 credStore이 있는 line을 제거합니다.
{
"auths": {
"https://index.docker.io/v1/": {}
},
"credsStore": "desktop"
}
# 제거 후
{
"auths": {
"https://index.docker.io/v1/": {}
}
}
4. Hub repository에 업로드 확인