Se você usar um contêiner personalizado no Dataflow, ele precisará corresponder à arquitetura das VMs de worker. Este documento descreve como criar contêineres de várias arquiteturas compatíveis com VMs x86 e ARM.
É possível usar a CLI do Docker ou o Cloud Build para criar a imagem do contêiner.
Usar o Docker para criar a imagem
Crie um Dockerfile: Use a instrução
FROM
para especificar uma imagem base de várias arquiteturas.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Instale a ferramenta Buildx. Para verificar se a ferramenta está instalada, execute o seguinte comando:
docker buildx version
Execute o comando a seguir para criar uma instância do builder que usa o driver
docker-container
. Esse driver é necessário para a criação de imagens de várias arquiteturas.docker buildx create --driver=docker-container --use
A flag
--use
define a nova instância do builder como a atual.Execute o comando a seguir para configurar o Docker e autenticar solicitações para o Artifact Registry.
gcloud auth configure-docker REGION-docker.pkg.dev
Substitua REGION pela região do repositório do Artifact Registry.
Execute o comando a seguir para criar e enviar a imagem do contêiner para o Artifact Registry:
docker buildx build \ --platform=linux/amd64,linux/arm64 \ -t REGISTRY/IMAGE:TAG \ --push .
Substitua:
- REGISTRY: o repositório do Docker
- IMAGE: o nome da imagem
- TAG: a tag de imagem
Usar o Cloud Build para criar a imagem
Crie um Dockerfile: Use a instrução
FROM
para especificar uma imagem base de várias arquiteturas.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
No mesmo diretório que contém o Dockerfile, crie um arquivo chamado
docker_buildx.yaml
. Cole o seguinte texto: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', '.']
Substitua:
- REGISTRY: o repositório do Docker
- IMAGE: o nome da imagem
- TAG: a tag de imagem
Para criar e enviar a imagem, execute o comando
gcloud builds submit
:gcloud builds submit --region=REGION --config docker_buildx.yaml
Substitua REGION pela região do serviço do Cloud Build a ser usado.
Para mais informações, consulte Criar e enviar uma imagem Docker com o Cloud Build.
Verificar a imagem do contêiner
Abra a página Repositórios no console do Google Cloud.
Clique no repositório com a imagem do contêiner.
Clique na imagem para conferir as versões.
Clique em uma versão.
Clique em Manifesto.
No arquivo de manifesto, a seção
platform
precisa ter entradas paraarm64
eamd64
. Por exemplo:{ "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" } } ] }