Google의 Jib을 사용하여 스프링 부트 앱을도 커링하는 방법

이미지 1 : Jib!

안녕하세요! 최근 스프링 기반 플랫폼에서 작업하는 동안 마이크로 서비스를 도킹하는 방법을 고려하고있었습니다. 그래서 저는 구글이 개발 한 상당히 새로운 접근 방식 인 지브를 발견했습니다.

이 글은 컨테이너화 된 스프링 부트 애플리케이션을 빌드하기 위해 Jib,보다 구체적으로 jib-maven-plugin을 사용하는 것에 관한 것입니다.

이 게시물에 사용 된 데모 프로젝트는 여기에서 찾을 수 있습니다.

지브 무엇입니까

Jib이 테이블에 가져 오는 것은 선택한 빌드 도구 (Maven 또는 Gradle)에 플러그인을 추가하기 만하면 컨테이너를 만들 수 있다는 것입니다. 추가 파일이없고 몇 줄만 구성하면 컨테이너 이미지로 애플리케이션을 패키징하는 모든 단계를 처리합니다.

Google 클라우드 팀 자체의 말로 :

Jib는 Java 개발자가 알고있는 Java 도구를 사용하여 컨테이너를 빌드 할 수있는 Google의 오픈 소스 Java 컨테이너입니다. Dockerfile을 작성하거나 docker를 설치할 필요가 없으며 Maven 및 Gradle에 직접 통합됩니다.

“전통적인”Java에서 Docker 이미지 빌드 흐름으로 아래와 같이 Dockerfile과 docker 데몬이 설치되어 있어야합니다.

이미지 2 : Java 앱에서 도커 이미지를 만드는 전통적인 단계입니다.

다이어그램에서 알 수 있듯이 Jib 빌드 흐름에서는 프로젝트의 빌드 파일 플러그인이 필요합니다.

이미지 3 : Java 앱에서 도커 이미지를 만드는 Jib 방식.

설정

Java 개발 환경을 설정하는 것은이 글의 범위에 속하지는 않지만, 한 번 살펴 보자!

  1. Java 8 이상이 설치되어 있는지 확인하십시오.
  2. 우리는 maven을 사용할 것이므로 설치하지 않으면 maven 3.5 이상을 설치하십시오.
  3. 도 커가 설치되어 있고 Linux를 사용하는 경우 사용자에게 도커 액세스 권한이 있는지 확인하십시오.
  4. 좋아하는 IDE를 설치하십시오 (일식 또는 아이디어).

기본 스프링 부트 응용 프로그램 만들기

이것은 스프링 이니셜 라이저 또는 선호하는 IDE를 통해 수행 할 수 있습니다. 스프링 이니셜 라이저를 사용했다면 새로 작성된 maven 프로젝트를 IDE (eclipse / idea)로 가져와야합니다.

pom.xml에 jib-maven-plugin 추가

로컬로 저장된 기본 앱 이미지의 경우 다음과 같이 pom.xml에서 jib-maven-plugin을 구성하십시오.

앱을 컴파일하고 이미지를 빌드하십시오.

이제 애플리케이션을 빌드하고 이미지가 로컬 도커 저장소에 생성되었는지 확인할 수 있습니다.

터미널을 통해 프로젝트의 루트 폴더로 이동하여 다음을 실행하십시오.

mvn 컴파일 지브 : dockerBuild

Maven 빌드 로그에는 다음과 같은 줄이 포함되어야합니다.

[정보] — — jib-maven-plugin : 0.10.1 : dockerBuild (default-cli) @ spring-boot-jib —-
[정보]
[INFO] springbootjib으로 Docker 데몬에 응용 프로그램 컨테이너화…
[경고] 기본 이미지 'gcr.io/distroless/java'는 특정 이미지 요약을 사용하지 않습니다. 빌드를 재현 할 수 없습니다
[정보] 기본 이미지 가져 오기 gcr.io/distroless/java…
[정보] 건물 종속성 계층…
[정보] 건축 자원 계층…
[정보] 건물 클래스 레이어…
[정보] 마무리…
[정보]
[INFO] 컨테이너 시작점이 [java, -cp, / app / resources : / app / classes : / app / libs / *, com.jibdemo.SpringBootJibApplication]으로 설정되었습니다.
[정보] Docker 데몬으로로드하는 중…
[정보]
[정보] springbootjib로 Docker 데몬에 이미지 내장

오류가없고 maven“springbootjib로 Docker 데몬에 내장 이미지”가있는 한 모두 설정되었습니다.

도커 이미지 실행

이제 로컬 리포지토리에 새로운 도커 이미지가 있어야합니다. docker image ls를 실행하여 확인할 수 있으며 다음과 비슷한 이미지가 표시됩니다.

springbootjib 최신 eb4bea693650 3 시간 전에 135MB

Jib가 기본적으로 사용하는 gcr.io/distroless/java 이미지로 인한 매우 작은 (135mb) 이미지 크기에 주목하십시오 (나중에 어떻게 변경할 수 있는지 알 수 있습니다).

이제 docker run -it springbootjib를 입력하여 평소대로 이미지를 실행하고 앱이 예상대로 실행되고 있는지 확인할 수 있습니다.

Docker 이미지를 미세 조정하도록 Jib 플러그인 구성

Docker 저장소에 로그인, 포트 노출, 특정 기본 이미지 선택 등과 같은 몇 가지 일반적인 시나리오에 맞게 더 깊이 파고 Jib 플러그인을 구성 할 수 있습니다.

예를 들어 다음 구성에서 이미지 :

  • openjdk : alpine (Docker Hub에서 당김) 기반으로 제작
  • localhost : 5000 / springbootjib : 0.0.1-SNAPSHOT, localhost : 5000 / springbootjib : alpine 및 localhost : 5000 / springbootjib : latest로 푸시됩니다.
  • java -Xms256m -Xdebug -cp app / libs / * : app / resources : app / classes com.jibdemo.SpringBootJibApplication을 호출하여 실행
  • 포트 8001을 tcp (기본값)에 노출하고 포트 8002 및 8003을 udp에 노출
  • 라벨이 있습니다 (name : springbootjib)
  • OCI 형식으로 구축

이제 이미지를 다시 빌드하고 maven 로그의 차이점을 확인할 수 있습니다.

[INFO] --- jib-maven-plugin : 0.10.1 : dockerBuild (기본 CLI) @ spring-boot-jib ---
[정보]
[정보] 응용 프로그램을 localhost : 5000 / springbootjib : 0.0.1-SNAPSHOT, localhost : 5000 / springbootjib : alpine, localhost : 5000 / springbootjib로 Docker 데몬에 컨테이너화하는 중 ...
[정보] 기본 이미지 openjdk : alpine 가져 오기 ...
[정보] 건물 종속성 계층 ...
[정보] 건물 리소스 레이어 ...
[정보] 건물 클래스 레이어 ...
[정보] 기본 이미지에는 인증이 필요합니다. openjdk : alpine을 다시 시도하는 중 ...
[정보] registry.hub.docker.com에 대한 레지스트리 자격 증명 검색 중 ...
[정보] 마무리 중 ...
[정보]
[INFO] 컨테이너 진입 점이 [java, -Xms256m, -Xdebug, -cp, / app / resources : / app / classes : / app / libs / *, com.jibdemo.SpringBootJibApplication]으로 설정되었습니다.
[정보] Docker 데몬으로로드 중 ...
[정보]
[INFO] localhost : 5000 / springbootjib : 0.0.1-SNAPSHOT, localhost : 5000 / springbootjib : alpine, localhost : 5000 / springbootjib로 Docker 데몬에 빌드 된 이미지

위의 로그 세그먼트에서 플러그인은 Docker Hub에서 이미지 openjdk : alpine을 가져 와서 서로 다른 태그가 지정된 세 가지 버전으로 이미지를 빌드하여 로컬 저장소에 저장했습니다.

내가 지브에게 총을 쏜 이유

  • Dockerfile을 유지 관리하거나 Docker 데몬을 실행하거나 모든 종속 항목으로 팻 JAR을 생성하는 것에 대해 걱정할 필요가 없습니다.
  • 이미지 계층화 및 레지스트리 캐싱을 활용하여 빠르고 점진적으로 빌드합니다.
  • 입력이 동일하게 유지되는 한 재현 가능한 빌드 이미지를 생성하도록 구성 할 수 있습니다.

결론

spotify 및 fabric8과 같은 다른 maven 플러그인을 사용하여 Java 앱용 도커 이미지를 만들었으므로 Google이 문제를 해결하는 것을 환영합니다. fabric8의 플러그인보다 파일이 덜 필요하며 (내 겸손하게도) spotify의 플러그인보다 구성하기가 쉽다고 느낍니다. 나는 그것을 시도하는 것이 좋습니다!

면책 조항 : 이것은 비교 기사가 아니며 개인적인 경험으로 뒷받침되는 문제에 대한 나의 견해입니다.

모든 구성 매개 변수에 대한 자세한 정보가있는 Jib의 github 저장소에 대해 더 자세히 읽을 수 있습니다. 지금까지 읽어 주셔서 감사합니다! 나는 당신이 그것을 즐기시기 바랍니다! 여기에 의견을 남겨주세요.

나에 대해서

들러 줘서 고마워 저는 백엔드와 devOps를 강조하는 독립적 인 풀 스택 엔지니어입니다. 비즈니스 가치 창출을 선택하여 프로토 타입 / MVP를 만들고 클라우드에서 확장 가능한 플랫폼을 개발하는 데 관심이 있습니다.

나와 내 이야기에 대해 더 자세히 읽을 수 있습니다. 비즈니스에 대해 논의하거나 연락을 원하시면 tasos.tsaousis@codedlines.com으로 이메일을 보내주십시오.