使用Buildpacks高效構建Docker鏡像

1. 前言

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

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

2. 靈魂追問

在瞭解這種技術以前,咱們先想一想咱們開發的Java應用運行起來都須要什麼?編程

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

若是咱們有一種工具來處理這些問題就行了,咱們能夠快速的實現從源碼到運行時的工做流程。windows

3. 和Dockerfile相比

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

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

2. 安裝Buildpacks

目前Buildpacks 支持 LinuxMacOSWindows。你能夠從 Buildpacks的官方文檔獲取詳細的安裝方法,由於過於簡單這裏再也不介紹。安全

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

若是Buildpacks 的路徑爲 D:\pack-v0.10.0-windows\pack.exe 則:app

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

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

3. 從代碼構建Docker鏡像

這裏咱們使用一個標準的Spring Boot項目,在項目的根目錄下須要安裝 Maven wrapperMaven Wrapper的做用是:發現用戶的Maven版本和指望的版本不一致,下載指望的版本,而後用指望的版原本執行mvn命令,安裝命令爲:ionic

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

相關文章
相關標籤/搜索