使用Buildpacks高效構建Docker鏡像


1. 前言

Spring Boot 2.3.0.RELEASE 正式發布了幾天了,其中有個新的特性:可以將Spring Boot應用代碼直接打包為Docker鏡像。這是什么科技?我趕緊去官網查了一番才知道用的是基於雲原生的Buildpacks技術,這是一個直接將代碼轉換為容器鏡像的技術,它意味着你不用在寫Dockerfile文件了。

但是 Spring Boot 2.3.0.RELEASE 的鏡像構建插件好像有BUG,等后續修復吧。但是本文的相關實踐並不采用官方的插件

2. 靈魂追問

在了解這種技術之前,我們先想想我們開發的Java應用運行起來都需要什么?

  1. 首先你得編寫業務邏輯代碼吧,這是最基本的。
  2. 你的應用配置環境,也可以成為Profile,比如Spring Boot應用中 application.yml 的環境配置。
  3. 特定的語言環境,Java需要跑在JVM上, 其它語言也對應的需要它們的特定環境。
  4. 運行時環境,比如我們的Spring Boot應用還可能依賴其它中間件、第三方類庫等等。

如果我們有一種工具來處理這些問題就好了,我們可以快速的實現從源碼到運行時的工作流程。

3. 和Dockerfile相比

Buildpacks就是來解決這一問題的。這不是重復的輪子!與我們熟悉的Dockerfile相比,Buildpacks為構建應用程序提供了更高層次的構建抽象。

  • 減輕了開發者的負擔,並支持大規模的應用程序的管理。
  • 多語言支持,針對特定的編程語言有特定的一攬子構建機制,比如 JavaGolangRubyPython等。
  • 保證應用構建的安全性和合規性,而無需開發者干預。
  • 提供操作系統級別和應用程序級別的依賴關系升級的自動交付,屏蔽了Dockerfile 的復雜性。
  • 提供merge功能,讓我們可以在原來的基礎上增加新的功能和補丁,而無需重新構建。

2. 安裝Buildpacks

目前Buildpacks 支持 LinuxMacOSWindows。你可以從 Buildpacks的官方文檔獲取詳細的安裝方法,因為過於簡單這里不再介紹。

別忘記配置 Buildpacks 的環境變量。在 Win10 上需要將 Buildpacks 的安裝目錄配置到 path 環境變量中。

如果Buildpacks 的路徑為 D:\pack-v0.10.0-windows\pack.exe 則:

然后命令行執行 pack version,打印出版本號就表示安裝成功了。

安裝Buildpacks的先決條件是,擁有Docker運行時,你需要在對應操作系統上安裝並運行Docker

3. 從代碼構建Docker鏡像

這里我們使用一個標准的Spring Boot項目,在項目的根目錄下需要安裝 Maven wrapperMaven 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. 總結

BuildpacksCNCF基金會的孵化項目,此次Spring Boot 2.3.0.RELEASE和它的結合,是Spring Boot構建雲原生應用的重要里程碑。后面我會抽時間對Buildpacks進行進一步的介紹,敬請關注我的個人博客felord.cn

關注公眾號:Felordcn 獲取更多資訊

個人博客:https://felord.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM