Docker

Jib를 이용하여 자바 컨테이너 빌드

mers 2023. 6. 4. 19:47

 

Jib란 ?

 - Jib란 구글 클라우드 도구 jib를 이용하여 프로젝트 빌드와 동시에 컨테이너 이미지까지 만들어서 push까지 해주는 역할을 합니다.

 - jib에 대한 상세설명

 

 

 

Jib는 왜 사용하는가 ?

 

기존의 Docker 빌드 흐름은 아래와 같습니다.

기존 Docker build 흐름 (참고 : https://cloud.google.com/java/getting-started/jib?hl=ko)

 

 

Jib를 이용하면 JAVA 애플리케이션을 컨테이너 이미지로 구성하는 작업을 한 번에 해줍니다. 

Jib 빌드 흐름 (참고 : https://cloud.google.com/java/getting-started/jib?hl=ko)

 

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에 업로드 확인