Docker 多平台建構 (Docker Buildx)
Buildx 是 Docker 的構建引擎,擴展了標準的 docker build
命令。並提供了一系列高級功能,特別是在多架構構建和並行構建方面。
主要特性
- 多架構構建:
- 在單個命令中為多個平台構建映像。
- 支持跨平台構建,如在 x86 機器上構建 ARM 映像。 - 增強的構建器選項:
- 支持多種驅動程序,如 docker-container、kubernetes。
- 可以創建和管理多個構建實例。 - 並行構建:
- 同時為多個平台構建映像,提高效率。 - 高級緩存機制:
- 改進的緩存管理,支持導出和導入構建緩存。 - 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