Docker 多平台建構 (Docker Buildx)

Docker 多平台建構 (Docker Buildx)
Buildx 是 Docker 的構建引擎,擴展了標準的 docker build 命令。並提供了一系列高級功能,特別是在多架構構建和並行構建方面。

主要特性

  1. 多架構構建:
    - 在單個命令中為多個平台構建映像。
    - 支持跨平台構建,如在 x86 機器上構建 ARM 映像。
  2. 增強的構建器選項:
    - 支持多種驅動程序,如 docker-container、kubernetes。
    - 可以創建和管理多個構建實例。
  3. 並行構建:
    - 同時為多個平台構建映像,提高效率。
  4. 高級緩存機制:
    - 改進的緩存管理,支持導出和導入構建緩存。
  5. Bake 文件支持:
    - 使用 HCL 或 JSON 文件定義複雜的構建配置。

提供一段建構多平台指令,可以透過 docker buildx inspect --bootstrap 查詢當前環境可以建構哪些平台,可以發現到運行之後出現失敗,是因為當前的buildx 是使用預設 desktop-linux 並不支援多平台建構。

docker buildx build \ 
  --platform linux/amd64,linux/arm64 \ 
  -f ./devops/php/Dockerfile \ 
  -t harbor.xxx.com/prj/prj-php:v4 --push .

透過 docker buildx ls 查詢 當前所在是哪個建構器。

創建並使用 docker-container 驅動的建構器

運行以下命令,會自動創建名為 mycontainerbuilder 的建構器,並自動選擇做使用。

docker buildx create --use \ 
  --name mycontainerbuilder \ 
  --driver docker-container

再次運行建構,可以發現到就能正常運行了,若建構成功後,會建構amd64和arm64並推送到相對應的鏡像庫。

最後為什麼會需要 docker-container 驅動,是因為Buildx允許在獨立的容器運行建構鏡像的操作,所以才能夠支持多平台建構。 由於 docker 驅動有一些限制,無法支持在多平台建構,尤其實在docker buildx的多平台場景下。

切換回預設建構器

docker buildx use desktop-linux