介紹2022年信用盤平臺搭建原始碼更快的構建 Docker 映象的方法

TG_duotebb發表於2022-05-17

信用盤原始碼搭建原始碼,作為應用程式開發人員【TG電報-@duotebb】將我們的應用程式打包到容器中,或者作為負責為組織提供快速、穩定的構建基礎設施的平臺工程師,我們花費了大量時間構建和部署 Docker 映像。

介紹 Depot 的封面圖片——構建 Docker 映像的更快方法

在此過程中,我們注意到了一些常見的挑戰: docker build 可能會很慢。 優化速度是乏味的,而且很多時候很脆弱。 通常,CI 提供程式不是為容器構建而設計的,而且它們本身通常是緩慢構建的根源。

今天,我們推出了封閉測試版 Depot,以解決所有這些問題以及更多問題。 Depot 是一種託管容器構建服務,可提供極快的計算和零配置的持久智慧快取。 這是我們自己想要使用的工具,我們也將它構建到您想要的工具中!

為什麼 Docker 構建速度很慢?

能夠重用以前的工作是 Docker 快速構建的原因。 知道 何時 能夠重用該快取並管理快取的實際內容是使事情變慢的原因。

Docker 及其現代引擎 BuildKit 具有非常基本的快取。 他們使用層的抽象來描述 Dockerfile 如果您的影像的一層在兩次構建之間發生更改,則該點之後的整個快取都將失效。 在該點之後的所有未來層都必須重新構建。

編寫理解這一層快取的 Dockerfile 是一門藝術。 對於幼稚的事情,它們可能非常簡單。 但是有可能導致構建時間爆炸的細微錯誤。 通過這些複雜的細節獲得專業知識並不是每個團隊中的每個開發人員都需要或想要花費時間的事情。 同時,這些緩慢的構建會影響生產力和開發人員的幸福感。

為快取重用優化構建只是 Docker 快取的第一個挑戰。

管理大型 Docker 構建快取是第二個痛苦的挑戰。

在開發人員的膝上型電腦上,Docker 快取可能會佔用千兆位元組的磁碟空間。 對於每個本地構建,每個隊友的膝上型電腦都會重複使用快取磁碟。 因此,即使您的同事已經構建了昂貴的 Docker 映像,您也必須自己重新構建它才能在您的機器上使用它。

更糟糕的是,當前的 CI 系統限制了您可以擁有的磁碟空間量。 因此,即使您圍繞快取執行了所有 Docker 最佳實踐,它甚至可能不適合磁碟。 或者您必須自己管理快取的儲存/載入,通常會否定您會看到的任何效能提升。

介紹 Depot:我們對所有這些問題的解決方案

當我們開始在 Depot 工作時,我們問自己一個問題,如果這一切都是為我處理的呢?

我們建立 Depot 是為了解決我們 docker build 多年來所感受到的痛苦。 Depot 是一種遠端容器構建服務,您的構建在我們具有永久磁碟的快速機器上執行。

它由幾個關鍵元素組成,當它們組合在一起時,可以更輕鬆地在 CI 和本地機器上實現一致的快速構建。 直接與 Docker 的所有最佳快取機制整合:

  • 每臺構建機器提供 4 個 CPU、8GB 記憶體和 50GB 本地 SSD 快取
  • 構建器執行 BuildKit,這是最現代、最先進的容器構建器引擎
  • 所有配置,尤其是快取配置,都得到完全管理,您無需付出任何努力
  • 您可以從現有 CI 提供程式或本地計算機將構建路由到 Depot

倉庫構建器帶有託管的持久 SSD 快取。 他們立即啟動新構建,所有基本和高階 Docker 快取在幾秒鐘內就已經載入完畢。 我們支援您對 Dockerfile 開箱即用所做的任何優化。

我們的構建者隊伍配備的 CPU 和磁碟空間比許多通用 CI 提供商提供的要多。 因此快取和未快取的構建都可以很快。 我們的一些早期採用者已經看到了 11 倍的加速!

Depot 與現有的容器工具生態系統完全相容。 構建器執行最新版本的 BuildKit 以支援 Docker、OCI 和任何其他可用的 BuildKit 輸出格式。 我們的 CLI 是 的直接替代品 docker build ,因此採用通常可以像切換到 depot build 現有 CI 工作流程一樣簡單:

- run: docker build -t ...+ run: depot build -t ...

Depot 的另一個很酷的地方是,作為遠端構建服務,快取節省的時間是共享的。 由於 depot build 在 CI 和您的膝上型電腦上工作,每個人都可以使用相同的快取! 如果您的同事已經構建了該慢速映像,您的構建將自動檢測到這一點並下載結果。 如果您在開啟拉取請求之前已經在您的機器上構建了映像,那麼在檢查檔案雜湊後,您的 CI 構建可能幾乎是即時的!

還有一件事...

隨著 Arm CPU 的普及,例如 Apple M1、AWS Graviton 和 Azure Ampere,在 Intel CPU 上為 Arm 目標構建 Docker 映像變得越來越困難,反之亦然。 很少有 CI 提供商提供 Arm 執行器。 如果您需要在單個標籤中構建支援兩種架構的多平臺映像,這可能會特別困難。

Depot 原生支援 Intel (amd64) 和 Arm (arm64) 構建,無需模擬。

當您執行時 depot build ,我們會檢測您機器的架構並將您的構建路由到相同架構的構建器。 您可以使用 --platform CLI 標誌直接將您的構建路由到另一個目標架構。 我們支援單通道構建的多平臺影像 --platform linux/amd64,linux/arm64

您可以在我們的文件 中找到有關多平臺構建的更多資訊

加入我們的封閉測試版

這是 Depot 的第一次迭代,我們很高興將它推向世界! 我們目前處於封閉測試階段,很高興能得到我們能得到的所有反饋。 如果您想在此測試階段試用 Depot,請 註冊 一個帳戶或有任何問題 聯絡我們 ,我們將為您安排!

我們期待為每個人提供更快的構建速度!


下一步是什麼

我們已經在開發下一代 Depot 的構建器。 它在容器構建器空間中為上述所有內容新增了全新的東西: 依賴感知快取

與其僅僅依賴 Docker 的層快取(其中快取未命中會使所有未來的層失效),Depot 即將推出的構建器可以瞭解每個 Dockerfile 步驟之間的實際依賴關係。 無需任何配置或修改。

這提供了更快的構建,因為快取被更頻繁地重用。 但是,至關重要的是,這也意味著可以快速構建非常簡單的 Dockerfile。 這意味著您可以跳過通常完成的大部分 Dockerfile 優化並具有相似的構建效能。

在接下來的幾個月裡會有更多的事情發生。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017861/viewspace-2894815/,如需轉載,請註明出處,否則將追究法律責任。

相關文章