領先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多歡迎收看新一期的你可能不需要另一個函式庫 (#YMNNALFT
)! 自 2016 年以來,我花了很多時間在 我的 Spring Tips 影片中闡明(或試圖闡明!)Spring 生態系統中一些更巨大的機會。 然而,今天,我帶著不同的精神來到這裡,想要關注一些小而有時隱藏的瑰寶,它們可以做很棒的事情,並且可以免除您對額外第三方依賴及其隱含複雜性的需求。
您試過 Paketo 嗎? 它很棒! 它減輕了當今雲端軟體的最大痛苦之一:Dockerfiles。
順帶一提:最大的痛點當然是 YAML。 YAML 是人們離開 IT 產業的原因! YAML:當你想要 Python 那種縮排敏感的詭計,以及 Python 那種不存在的設計時驗證,而且沒有 Python 的任何好處時,YAML 就出現了。 YAML:因為生活顯然還不夠艱難。 十分之九的牙醫都同意:YAML 會導致生產腐爛!
「誠然,有人說 YAML 是配置的最佳形式,除了那些不時嘗試過的所有其他形式。」- 不是溫斯頓·邱吉爾
沒有壓力的 YAML 偵錯 ;) pic.twitter.com/vwCCYKTZY2
— Arun Gupta (@arungupta) 2020 年 12 月 20 日
總之,YAML 是另一個「歐普拉秀」等級的問題,我們沒有太多時間深入探討,所以讓我們繼續:我們想要簡化 Dockerfiles 的建立。 Dockerfiles 既乏味又需要我們重新指定在生產環境中執行應用程式所需的完整環境。 我們可以透過相當少的行數來完成一些工作,但正如我在避免 COVID-19 病毒時所學到的,「最少」不是「沒有」! 此外,能夠運作的東西並不能構成生產環境。 我們可以做得更好。
Paketo 是一個基於 buildpacks 專案的 Cloud Foundry 基金會專案,該專案來自 CNCF(代表「程式碼永遠不會完成」,或者可能是「通用網路程式碼基金會」,或者「雲原生運算基金會」?)。 從網站上得知:「buildpacks 將您的應用程式原始碼轉換為可以在任何雲端上執行的映像。 Paketo Buildpacks 為應用程式提供語言運行時支援。 它們利用 Cloud Native Buildpacks 框架使映像建立變得容易、高效且安全。」 基本上:應用程式輸入;容器輸出。 明白了嗎? 很棒!
Buildpacks 來自 Heroku 和 Cloud Foundry 平台即服務產品。 您將應用程式成品(例如 Java .jar
)提供給 buildpack,而 buildpack 會將您的應用程式以容器形式回傳給您。 更具體地說,它會建立一個合理的檔案系統,其中包含您的應用程式成品以及執行該應用程式成品所需的一切。 因此,假設有一個 .jar
,它可能會建立一個檔案系統,其中配置了 JVM,具有合理的記憶體限制以及配置的任何必需的 Java 代理程式。 所有這些最終都會被轉換成容器。 您會驚訝於您可以將多少東西容器化,而幾乎無需任何配置! Buildpacks 之所以有效,是因為無論我們抗議多少,大多數應用程式都不是特殊的。 .jar
對於每個人來說都是一個 .jar
,而 Node.js/NPM 專案對於每個人來說都以相同的方式構建。 Buildpacks 支援多種不同的語言和運行時(太多而無法一一列舉)。 您可以使用 Paketo CLI 快速容器化各種應用程式,例如:pack build .
。
或者,無論如何,如果您沒有使用 Spring Boot 2.3 或更高版本,您會這樣做。 但是,您正在使用,不是嗎? 現在,Spring Boot 構建外掛程式本身就支援 Buildpack。
如果您使用 Maven,您可以輸入以下咒語
./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=bootiful/demo
如果您使用 Gradle,您可以輸入以下咒語
./gradlew bootBuildImage --imageName=bootiful/demo
後退一分鐘,讓它完成所有工作。 它會在工作結束時輸出 Docker 映像。 然後,您可以 docker tag
然後 docker push
將該映像推送到您選擇的容器登錄檔(VMware Harbor、Google Container Registry、JFrog Container Registry、DockerHub 等)。
您想要將其投入生產嗎? 這也很簡單! 這是 Kubernetes 的正確咒語,假設您的映像位於 Google Container Registry 上,且成品 ID 為 demo
。 pom.xml
中指定的版本也會成為容器版本的標籤。
kubectl create deployment demo --image=gcr.io/bootiful/demo
希望這足以讓您投入生產,而無需配置 Jib 或 Spotify Maven 外掛程式,或製作冗長、複雜的 shell 指令碼來執行 docker build
本身。 現在,請別誤會。 您可能仍然需要建立自己的 `Dockerfile',無論出於何種原因,因為您可能需要說明特定圖層的排序或內容,如果是這樣,那麼 Spring Boot 也能在這裡為您提供支援。
好的,這足以開始了。 前往 Spring Initializr(我在網路上第二喜歡的地方,僅次於生產環境)並產生一個新專案,然後將您的容器化應用程式移植到您選擇的平台上。
您喜歡這種一目瞭然的方法嗎? 您學到什麼了嗎? 與往常一樣,我很想聽聽您的意見,所以 請在 Twitter 上發聲 (@starbuxman) ! 我將在本週晚些時候推出另一期 YMNNALFT,所以請務必不要錯過。 我有一些關於簡易 RPC、*Utils
物件的花園、使用 Micrometer 的維度量測等等主題的內容。