如果您在 Dataflow 中使用自訂容器,容器必須與工作站 VM 的架構相符。本文說明如何建立與 x86 和 Arm VM 相容的多架構容器。
您可以使用 Docker CLI 或 Cloud Build 建構容器映像檔。
使用 Docker 建構映像檔
建立 Dockerfile。使用
FROM
指令指定多架構基本映像檔。FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
安裝 Buildx 工具。如要檢查工具是否已安裝,請執行下列指令:
docker buildx version
執行下列指令,建立使用
docker-container
驅動程式的建構工具例項。必須使用這個驅動程式才能建構多架構映像檔。docker buildx create --driver=docker-container --use
--use
標記會將新的建構工具執行個體設為目前的建構工具。執行下列指令,將 Docker 設為驗證對 Artifact Registry 的要求。
gcloud auth configure-docker REGION-docker.pkg.dev
將 REGION 替換為 Artifact Registry 存放區的區域。
執行下列指令,建構容器映像檔並推送至 Artifact Registry:
docker buildx build \ --platform=linux/amd64,linux/arm64 \ -t REGISTRY/IMAGE:TAG \ --push .
更改下列內容:
- REGISTRY:Docker 存放區
- IMAGE:圖片名稱
- TAG:圖片標記
使用 Cloud Build 建構映像檔
建立 Dockerfile。使用
FROM
指令指定多架構基本映像檔。FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
在含有 Dockerfile 的同一個目錄中,建立名為
docker_buildx.yaml
的檔案。貼上下列文字:steps: - name: 'docker' args: ['buildx', 'create', '--driver', 'docker-container', '--name', 'container', '--use'] - name: 'docker' args: ['buildx', 'build', '--platform', 'linux/amd64,linux/arm64', '-t', 'REGISTRY/IMAGE:TAG', '--push', '.']
更改下列內容:
- REGISTRY:Docker 存放區
- IMAGE:圖片名稱
- TAG:圖片標記
如要建構及推送映像檔,請執行
gcloud builds submit
指令:gcloud builds submit --region=REGION --config docker_buildx.yaml
將 REGION 替換為要使用的 Cloud Build 服務區域。
詳情請參閱「使用 Cloud Build 建構及推送 Docker 映像檔」。
驗證容器映像檔
在 Google Cloud 控制台中開啟「Repositories」(存放區) 頁面。
按一下含有容器映像檔的存放區。
按一下圖片即可查看版本。
按一下版本。
按一下「資訊清單」。
在資訊清單檔案中,
platform
區段應包含arm64
和amd64
的項目。例如:{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:441d5438885049e2b388523a8cb5b77ea829c3c3f53326fb221fe185abd67f07", "size": 3074, "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:d3b98b0f8f3f555f5453c79b240bd2b862d4f52d853fe81bae55f01a663de29c", "size": 3073, "platform": { "architecture": "arm64", "os": "linux" } } ] }