Docker 構建多平臺映象

Undefined443發表於2024-05-01

構建多平臺映象的方法分為兩種:一種是在不同平臺的機器上分別構建並推送對應平臺的映象,然後透過 Docker Manifest 將兩個映象標籤合併為一個。另一種是透過 Docker buildx 在一臺機器上構建並推送兩個平臺的映象。

使用 Manifest 工具

此方法需要你先在對應架構的機器上分別構建和推送對應架構的映象標籤(例如:tag-amd64tag-arm64),然後使用 docker manifest 合併這些映象。

使用 docker manifest 命令手動建立和維護多架構映象列表:

# 建立和維護清單檔案
docker manifest create username/repository:tag \
  --amend username/repository:tag-amd64 \
  --amend username/repository:tag-arm64

# 推送 multi-architecture 映象
docker manifest push username/repository:tag

檢查映象

建立並推送完成後,你可以到 Docker Hub 上檢查映象是否正確標記了多個架構。

docker manifest inspect username/repository:tag

這個命令將展示映象的後設資料,包括它支援的架構。

使用 Docker buildx

Docker buildx 是 Docker 官方提供的一個外掛,支援構建多平臺映象。你可以使用以下步驟建立一個支援多架構的映象:

  1. 建立並啟動builder例項:

    首先,確保你的 Docker 版本是最新的,並且已經開啟了實驗性功能(experimental features)。可以透過修改 Docker 的配置檔案或設定環境變數 DOCKER_CLI_EXPERIMENTAL=enabled 來啟用。

    export DOCKER_CLI_EXPERIMENTAL=enabled
    

    如果你還沒有建立過 buildx builder 例項,需要首先建立一個:

    docker buildx create --name mybuilder --use  # 建立構建器
    docker buildx inspect --bootstrap  # 檢查並啟動構建器
    
  2. 構建和推送映象:

    buildx 支援直接構建並推送多架構的映象。例如,你可以在 arm64 機器上執行類似以下命令:

    # 使用 buildx 構建並推送映象到 Docker Hub(或其他容器倉庫)
    docker buildx build --platform linux/amd64,linux/arm64 -t username/repository:tag --push .
    

    這個命令會同時為 amd64 和 arm64 平臺構建映象,並將它們推送到指定的倉庫和標籤。

    構建的多平臺映象必須使用 --push 選項推送

驗證映象架構

構建並推送後,你可以使用以下命令檢視映象支援的架構:

docker buildx imagetools inspect username/repository:tag

這將展示映象標籤下支援的所有架構。

相關文章