Crie imagens de contentores de várias arquiteturas para o Dataflow

Se usar um contentor personalizado no Dataflow, o contentor tem de corresponder à arquitetura das VMs de trabalho. Este documento descreve como criar contentores de várias arquiteturas compatíveis com VMs x86 e Arm.

Pode usar a CLI do Docker ou o Cloud Build para criar a imagem do contentor.

Use 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 seguinte comando para criar uma instância do criador que use o controlador docker-container. Este controlador é necessário para criar imagens de várias arquiteturas.

    docker buildx create --driver=docker-container --use
    

    A flag --use define a nova instância do criador como o criador atual.

  4. Execute o seguinte comando para configurar o Docker de modo a autenticar pedidos ao Artifact Registry.

    gcloud auth configure-docker REGION-docker.pkg.dev
    

    Substitua REGION pela região do repositório do Artifact Registry.

  5. Execute o seguinte comando para criar e enviar a imagem de contentor para o Artifact Registry:

    docker buildx build \
      --platform=linux/amd64,linux/arm64 \
      -t REGISTRY/IMAGE:TAG  \
      --push .
    

    Substitua o seguinte:

    • REGISTRY: o repositório do Docker
    • IMAGE: o nome da imagem
    • TAG: a etiqueta de imagem

Use 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 ficheiro denominado 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 o seguinte:

    • REGISTRY: o repositório do Docker
    • IMAGE: o nome da imagem
    • TAG: a etiqueta 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 usar.

Para mais informações, consulte o artigo Crie e envie uma imagem Docker com o Cloud Build.

Valide a imagem do contentor

  1. Abra a página Repositórios na Google Cloud consola.

    Abra a página Repositórios

  2. Clique no repositório com a imagem do contentor.

  3. Clique na imagem para ver as respetivas versões.

  4. Clique numa versão.

  5. Clique em Manifesto.

  6. No ficheiro do manifesto, a secção platform deve ter entradas para arm64 e amd64. 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"
              }
            }
        ]
      }
    

O que se segue?