全部產品
Search
文件中心

Container Registry:本地構建和推送多架構鏡像到Container Registry

更新時間:Nov 14, 2024

使用ARM架構資源部署容器通常可以節省不少成本,但也可能導致維護成本增加,您可能需要面向x86、ARM架構分別構建鏡像並設定不同的Tag。您可以使用docker buildx來構建多架構鏡像,並通過docker manifest實現一個Tag管理多架構的容器鏡像。

前提條件

從Dockerfile構建多架構鏡像

  1. 本文以Java Maven專案為例,在Java Maven專案中建立Dockerfile檔案,並在檔案中添加如下內容。

    #First stage: complete build environment
    FROM maven:3.5.0-jdk-8-alpine AS builder
    
    # add pom.xml and source code
    ADD ./pom.xml pom.xml
    ADD ./src src/
    
    # package jar
    RUN mvn clean package
    
    # Second stage: minimal runtime environment
    From openjdk:8-jre-alpine
    
    # copy jar from the first stage
    COPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jar
    
    EXPOSE 8080
    
    CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"]
  2. 在Java Maven專案所在的目錄下開啟本地終端,執行如下命令。

    1. 執行如下命令,關閉docker buildx的Provenance attestations選項。

      export BUILDX_NO_DEFAULT_ATTESTATIONS=1
    2. 執行如下命令,構建多架構鏡像。

      docker buildx build . -t acr-test-registry.cn-hangzhou.cr.aliyuncs.com/test/test:multi  --platform linux/amd64,linux/arm64 --push

      執行該命令後,將在本地構建出Amd64、Arm64兩種平台的容器鏡像,並將其推送到容器鏡像倉庫中。

    說明

    執行Docker Push需要提前通過Docker Login登入目標倉庫。例如:docker login --username=xxx acr-test-registry.cn-hangzhou.cr.aliyuncs.com

從已有鏡像中建立多架構鏡像

本文以您擁有兩個單架構鏡像,且希望使用這兩個單架構鏡像建立出一個多架構鏡像為例。

  1. 運行docker tag,重新每個單架構鏡像打上標記,並將其推送至Container Registry企業版執行個體。如下以一個架構為ARM64和一個架構為AMD64的單架構Nginx鏡像為例。

    docker tag nginx:arm64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64
    docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64
    
    docker tag nginx:amd64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64
    docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64
  2. 運行docker manifest create建立一個Manifest List,將1中的鏡像合并到一個多架構鏡像中。

    docker manifest create acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi \
     acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 \
     acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64
  3. 運行docker manifest push將Manifest List送到Container Registry企業版執行個體中。

    docker manifest push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi

相關文檔

您也可以通過Container RegistryACR控制台配置並在雲端運行多架構鏡像構建任務,請參見構建多架構容器鏡像