Criar imagens de contêiner de multiarquitetura para o Dataflow

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

  1. 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 ./
    
  2. Instale a ferramenta Buildx. Para verificar se a ferramenta está instalada, execute o seguinte comando:

    docker buildx version
    
  3. 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.

  4. 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.

  5. 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

  1. 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 ./
    
  2. 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
  3. 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

  1. Abra a página Repositórios no console do Google Cloud.

    Abrir a página Repositórios

  2. Clique no repositório com a imagem do contêiner.

  3. Clique na imagem para conferir as versões.

  4. Clique em uma versão.

  5. Clique em Manifesto.

  6. No arquivo de manifesto, a seção platform precisa ter entradas para arm64 e amd64. 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"
              }
            }
        ]
      }
    

A seguir