如果您在 Dataflow 中使用自定义容器,则该容器必须与工作器虚拟机的架构匹配。本文档介绍了如何创建与 x86 和 Arm 虚拟机都兼容的多架构容器。
您可以使用 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 控制台中的制品库页面。
点击包含容器映像的制品库。
点击映像以查看其版本。
点击一个版本。
点击清单。
在清单文件中,
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" } } ] }