
1. 前言
Spring Boot 2.3.0.RELEASE 正式發布了幾天了,其中有個新的特性:可以將Spring Boot應用代碼直接打包為Docker鏡像,這是什么科技?我趕緊去官網查了一番才知道用的是基于云原生的Buildpacks技術,這是一個直接將代碼轉換為容器鏡像的技術,它意味著你不用在寫Dockerfile檔案了,
但是 Spring Boot 2.3.0.RELEASE 的鏡像構建插件好像有BUG,等后續修復吧,但是本文的相關實踐并不采用官方的插件,
2. 靈魂追問
在了解這種技術之前,我們先想想我們開發的Java應用運行起來都需要什么?
- 首先你得撰寫業務邏輯代碼吧,這是最基本的,
- 你的應用配置環境,也可以成為Profile,比如Spring Boot應用中
application.yml的環境配置, - 特定的語言環境,Java需要跑在JVM上, 其它語言也對應的需要它們的特定環境,
- 運行時環境,比如我們的Spring Boot應用還可能依賴其它中間件、第三方類別庫等等,
如果我們有一種工具來處理這些問題就好了,我們可以快速的實作從原始碼到運行時的作業流程,
3. 和Dockerfile相比
Buildpacks就是來解決這一問題的,這不是重復的輪子!與我們熟悉的Dockerfile相比,Buildpacks為構建應用程式提供了更高層次的構建抽象,
- 減輕了開發者的負擔,并支持大規模的應用程式的管理,
- 多語言支持,針對特定的編程語言有特定的一攬子構建機制,比如 Java、Golang、Ruby、Python等,
- 保證應用構建的安全性和合規性,而無需開發者干預,
- 提供作業系統級別和應用程式級別的依賴關系升級的自動交付,屏蔽了Dockerfile 的復雜性,
- 提供merge功能,讓我們可以在原來的基礎上增加新的功能和補丁,而無需重新構建,

2. 安裝Buildpacks
目前Buildpacks 支持 Linux、MacOS、Windows,你可以從 Buildpacks的官方檔案獲取詳細的安裝方法,因為過于簡單這里不再介紹,
別忘記配置 Buildpacks 的環境變數,在 Win10 上需要將 Buildpacks 的安裝目錄配置到 path 環境變數中,
如果Buildpacks 的路徑為 D:\pack-v0.10.0-windows\pack.exe 則:

然后命令列執行 pack version,列印出版本號就表示安裝成功了,
安裝Buildpacks的先決條件是,擁有Docker運行時,你需要在對應作業系統上安裝并運行Docker ,
3. 從代碼構建Docker鏡像
這里我們使用一個標準的Spring Boot專案,在專案的根目錄下需要安裝 Maven wrapper,Maven Wrapper的作用是:發現用戶的Maven版本和期望的版本不一致,下載期望的版本,然后用期望的版本來執行mvn命令,安裝命令為:
mvn -N io.takari:maven:wrapper
一般從 Spring Initializr 生成的專案都自帶Maven wrapper,
完成上面的幾步之后,執行下面的命令構建Docker鏡像:
pack build myapp --builder cnbs/sample-builder:bionic
執行完畢后你的 Docker 鏡像就構建完畢了,甚至有需要的話你可以再追加 --publisher命令將鏡像上傳到Docker鏡像倉庫, 和以往不同的是無需撰寫Dockfile檔案,
初次構建的時間可能會比較長,因為要安裝一些基礎設施,以后再構建就會快得多,因為會重用這些有用的快取,有興趣的可以對比一下,
4. 總結
Buildpacks是CNCF基金會的范訓專案,此次Spring Boot 2.3.0.RELEASE和它的結合,是Spring Boot構建云原生應用的重要里程碑,后面我會抽時間對Buildpacks進行進一步的介紹,敬請關注我的個人博客felord.cn,
關注公眾號:Felordcn 獲取更多資訊
個人博客:https://felord.cn
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/182413.html
標籤:Java
上一篇:一周面試了 30 人,通過 2 人,面試面到我心態爆炸…
下一篇:【報錯】匯入專案后報錯:Target runtime Apache Tomcat v7.0 is not defined.
