1 pontos por GN⁺ 2024-07-13 | 1 comentários | Compartilhar no WhatsApp

Usando o S3 como registro de contêineres

  • Nos últimos 4 meses, houve colaboração com a Outerbounds para desenvolver um construtor personalizado de imagens de contêiner
  • Foi descoberto que é possível usar o S3 como registro de contêineres
  • Ao expor um bucket do S3 via HTTP e fazer upload da imagem em um caminho específico, é possível baixar a imagem com o comando docker pull

Demonstração

  • Foi criada uma imagem de contêiner que executa cowsay e ela foi enviada para um bucket do S3
  • Foi usado o R2 para fornecer egress gratuito
  • R2 e S3 são compatíveis no nível de API
$ docker run --rm pub-40af5d7df1e0402d9a92b982a6599860.r2.dev/cowsay

Por que usar o S3?

  • Tradicionalmente, usa-se DockerHub, GitHub Container Registry, ECR etc.
  • O S3 oferece uma grande vantagem em velocidade de upload
  • Ao comparar a velocidade de upload entre ECR e S3, o S3 foi até 8 vezes mais rápido

Por que o S3 é mais rápido

  • O S3 permite enviar em paralelo os chunks de uma única camada
  • O ECR, por seguir a OCI Distribution Spec, precisa fazer upload de forma sequencial
  • Como não permite upload paralelo, o ECR não consegue aproveitar totalmente a largura de banda

O S3 não é um registro de contêineres

  • Em termos estritos, o S3 não é um registro de contêineres
  • O comando docker pull baixa arquivos por meio de requisições HTTP
  • Se o bucket do S3 for configurado adequadamente, ele pode ser usado como registro de contêineres

Observações

  • Esse método é altamente experimental
  • Ele não oferece os recursos de registros de contêineres tradicionais (ex.: varredura de segurança, controle de acesso etc.)
  • Mais pesquisa é necessária

PS. E a baleia?

  • É uma piada para consultar o logotipo do Docker

Resumo do GN⁺

  • Este texto explica como usar o S3 como registro de contêineres
  • É possível aproveitar a alta velocidade de upload do S3
  • É preciso cuidado, pois ele não oferece os recursos dos registros de contêineres tradicionais
  • É uma abordagem experimental, mas interessante
  • Outros projetos com funções semelhantes incluem DockerHub, GitHub Container Registry e ECR

1 comentários

 
GN⁺ 2024-07-13
Comentários do Hacker News
  • Há a opinião de que seria bom se a especificação OCI Distribution suportasse arquivos estáticos

    • Isso permitiria usar diretamente um servidor HTTP simples ou um protocolo de arquivos
    • Todos os metadados já estão incluídos no manifesto
    • Content-Type: octet-stream poderia funcionar bem
  • Há a opinião de que a especificação OCI Distribution não foi bem projetada

    • O push das camadas precisa ser feito de forma sequencial
    • O upload em chunks não funciona direito no DockerHub e no GHCR
    • O formato do valor de Content-Range não corresponde ao formato da RFC7233
    • Perdeu-se a oportunidade de padronizar a paginação da lista de tags
  • Há a informação de que a Cloudflare tornou open source um servidor de registro de contêineres usando R2

    • Perguntam se alguém já usou
  • Há a opinião de que gostariam de saber por que, na especificação OCI, o push de camadas precisa acontecer de forma sequencial

    • O conteúdo de uma única camada precisa ser enviado sequencialmente
    • É possível fazer push de várias camadas em paralelo
  • Há opiniões sobre os motivos para usar o Nexus e seus prós e contras

    • Ele oferece suporte a vários pacotes e repositórios
    • A configuração e o uso de recursos são incômodos
    • As requisições de docker pull consistem apenas em requisições simples de HEAD e GET
    • Surpreende a falta de registries de contêiner mais simples
  • Há a informação de que o Distribution da CNCF oferece suporte para fazer backup do registry no S3 por meio de URLs assinadas do Cloudfront

  • Há a opinião de que é uma pena não haver menção aos custos de S3 e R2

  • Há a informação de que o ECR oferece suporte ao upload de camadas de imagem em várias partes

    • APIs relacionadas:
      • API InitiateLayerUpload: chamada ao iniciar o upload de cada camada de imagem
      • API UploadLayerPart: chamada ao enviar cada chunk da camada (máximo de 20 MB)
      • API PutImage: chamada ao fazer push do manifesto da imagem após o upload das camadas
    • É estranho que os chunks da camada precisem ser enviados com codificação base64
  • Há reclamações sobre o Registry do Docker

  • Há a opinião de que não entendem a razão de existir de um registry de contêiner pessoal

    • Pode ser melhor simplesmente gerar e gerenciar arquivos de imagem