歡迎光臨
每天分享高質量文章

Jib 1.0.0迎來通用版本——以前所未有的低門檻構建Java Docker鏡像

去年,我們開始著手幫助開發人員更輕鬆地實現Java應用程式的容器化轉換。我們註意到,開發人員們在使用現有工具時往往面臨諸多困難——例如構建速度太慢,Dockerfiles混合不堪,以及容器體積過大等等。
為了改變上述狀況,我們開發出了Jib。Jib是一款開源工具,能夠非常輕鬆地與您的Java應用程式實現集成——您無需安裝Docker、無需運行Docker守護程式,甚至不需要編寫Dockerfile。只需要在Maven或者Gradle build當中使用這款插件並運行構建過程,一切即可迎刃而解。Jib能夠利用既有構建信息快速且高效地自動與您的應用程式完成適配。在Jib的幫助下,構建Java容器如今就像打包JAR檔案一樣簡單。
我們於去年公佈了Jib的beta測試版本,從那時開始,我們陸續收到了來自社區的諸多反饋與貢獻,這也幫助我們更好地實現了其容器化體驗。今天,我們高興地宣佈Jib 1.0.0通用版本的正式來臨,其已經做好充分的準備,能夠滿足生產環境對於穩定性的嚴格要求。
我們將在這篇文章當中對版本中的主要變更做出說明,具體包括對WAR專案的支持、與Skaffold的集成以及面向Java的全新容器構建庫Jib Core。
Jib 1.0版本中包含哪些重點?

 

Docker化WAR專案
Java編寫的Web應用程式通常會被打包成WAR檔案。如今,Jib已經能夠對WAR專案進行容器化,且完全無需額外配置。您只需要直接運行以下命令:
Maven:
  1. $ mvn package jib:build
Gradle:
  1. $ gradle jib
該容器中的預設應用服務器為Jetty,但您也可以對基礎鏡像以及appRoot進行配置調整,從而使用Tomcat等其它服務器選項:
Maven(pom.xml):
  1.  
  2.    tomcat:8.5-jre8-alpine
  •  
  •  
  •    gcr.io/my-project/my-war-image
  •  
  •  
  •    /usr/local/tomcat/webapps/my-webapp
  •  
Gradle(build.gradle):
  1. jib {
  2.  from.image = 'tomcat:8.5-jre8-alpine'
  3.  to.image = 'gcr.io/my-project/my-war-image'
  4.  container.appRoot = '/usr/local/tomcat/webapps/my-webapp'
  5. }
感興趣的朋友請參閱Docker化Maven WAR專案[1]與Docker化Gradle WAR專案[2]的相關說明。
在Kubernetes開發當中與Skaffold for Java相集成

 

Skaffold是一款用於在Kubernetes上實現持續開發的命令列工具。我們將Skaffold與Jib加以集成,旨在實現Kubernetes之上的無縫化開發體驗。Jib現在已經可以作為Skaffold當中的builder選項。
要在您的Java專案當中開始使用Skaffold,您首先需要安裝Skaffold並向專案當中添加skaffold.yaml檔案:
  1. skaffold.yaml:
  2. apiVersion: skaffold/v1beta4
  3. kind: Config
  4. build:
  5.  artifacts:
  6.  - image: gcr.io/my-project/my-java-image
  7.    # Use this for a Maven project:
  8.    jibMaven: {}
  9.    # Use this for a Gradle project:
  10.    jibGradle: {}
請確保您已經把Kubernetes清單存放在k8s/目錄當中,且Container規範中的鏡像取用匹配至gcr.io/my-project/my-java-image位置。請查閱Skaffold庫作為參考[3]。
接下來,您可以使用以下命令啟動Skaffold的持續開發功能:
  1. $ skaffold dev --trigger notify
Skaffold能夠幫助您消除在進行每一項變更之後,對應用程式進行重新構建與重新部署所帶來的一系列繁瑣步驟。Skaffold會利用Jib對您的應用程式進行容器化轉換,而後在檢測到變更時將其部署至您的Kubernetes集群當中。現在,您將能夠把精力集中到真正重要的工作——編寫代碼身上。
Jib Core:在Java中構建Docker鏡像
Jib運行在我們自己用於構建容器鏡像的通用庫之上,我們將這套庫以Jib Core的形式進行發佈,同時進行了一系列API改進。現在,您可以將Jib作為Maven以及Gradle插件,從而在無需Docker守護程式的前提下麵向任意應用程式利用Java進行容器構建。
要使用Jib Core,您需要在專案當中添加以下檔案:
Maven(pom.xml):
  1.  com.google.cloud.tools
  •  jib-core
  •  0.1.1
Gradle(build.gradle):
  1. dependencies {
  2.  implementation 'com.google.cloud.tools:jib-core:0.1.1'
  3. }
以下是構建一套簡單Docker鏡像的操作示例。其將以基礎鏡像為起點,添加單一層、設置入口點,而後使用幾行代碼將鏡像推送至遠端註冊表當中:
  1. Jib.from("busybox")
  2.   .addLayer(Arrays.asList(Paths.get("helloworld.sh")), AbsoluteUnixPath.get("/"))
  3.   .setEntrypoint("sh", "/helloworld.sh")
  4.   .containerize(
  5.       Containerizer.to(RegistryImage.named("gcr.io/my-project/hello-from-jib")
  6.                                     .addCredential("myusername", "mypassword")));
我們也鼓勵大家利用Jib Core構建屬於自己的自定義容器化解決方案[4]。歡迎您在我們的Gitter頻道[5]上共享利用Jib Core構建的一切專案。另外,您也可以參考我們發佈的Jib Core其它使用示例,例如Gradle構建腳本[6]。
豐富的功能,加上仍然簡單易行的視窗化操作體驗

 

利用Jib對Java應用程式進行容器化轉換仍然與以往一樣簡單易行。如果您使用的是Maven,只需要將這款插件添加至pom.xml當中:
  1.  com.google.cloud.tools
  •  jib-maven-plugin
  •  1.0.0
  •  
  •    
  •      gcr.io/my-project/my-java-image
  •    
  •  
要構建一套鏡像並將其推送至容器註冊表,您可使用以下命令:
  1. $ mvn compile jib:build
或者使用以下命令面向Docker守護程式進行構建:
  1. $ mvn compile jib:dockerBuild
您現在甚至可以在無需修改pom.xml檔案的前提下實現應用程式容器化,具體操作如下:
  1. $ mvn compile com.google.cloud.tools:jib-maven-plugin:1.0.0:build -Dimage=gcr.io/my-project/my-java-image
若需瞭解更多細節信息,請參閱Jib Maven快速入門[7]。 
當配合Gradle使用Jib時,您需要將該插件添加至build.gradle當中:
  1. plugins {
  2.  id 'com.google.cloud.tools.jib' version '1.0.0'
  3. }
  4. jib.to.image = 'gcr.io/my-project/my-java-image'
在此之後,您可以利用以下命令將應用程式容器化至標的容器註冊表:
  1. $ gradle jib
或者使用以下命令將其容器化至Docker守護程式:
  1. $ gradle jibDockerBuild
若需瞭解更多細節信息,請參閱Jib Gradle快速入門[8]。
立即開始使用
我們希望Jib能夠幫助每一位朋友簡化並加快自己的Java開發行程。要開始使用Jib,請參閱我們的示例[9];此外,您也可使用Codelabs將Spring Boot應用程式或者Micronaut應用程式部署至Kubernetes當中。Jib能夠與大多數Docker註冊表提供程式以及托管註冊表相兼容;請盡情嘗試,並通過github.com/GoogleContainerTools/jib與我們分享您的心得體會。感謝!
相關鏈接:
  1. https://cloudtoolsforjava.page.link/hfCY

  2. https://cloudtoolsforjava.page.link/iDVw

  3. https://cloudtoolsforjava.page.link/WepQ

  4. https://cloudtoolsforjava.page.link/U1YB

  5. https://gitter.im/google/jib

  6. https://cloudtoolsforjava.page.link/K5uf

  7. https://cloudtoolsforjava.page.link/vhUX

  8. https://cloudtoolsforjava.page.link/vhUX

  9. https://cloudtoolsforjava.page.link/Xwwv

原文鏈接:https://cloud.google.com/blog/products/application-development/jib-1-0-0-is-ga-building-java-docker-images-has-never-been-easier

赞(0)

分享創造快樂