Como padronizar a entrega de software com OCI Artifacts, ORAS e Docker Hub

0
268

[ad_1]

O Docker Hub é o registro mais popular para distribuir e compartilhar imagens de contêiner. No entanto, o Docker Hub e outros registros compatíveis com OCI agora podem fazer mais do que apenas imagens de contêiner. O projeto ORAS (OCI Registry As Storage) transforma registros em lojas de artefatos genéricos, capazes de publicar qualquer ativo relevante para sua aplicação.

Neste artigo, você aprenderá o que é ORAS, os desafios que ele resolve e como começar a usá-lo com o Docker Hub.

Docker Hub vs. Registros OCI

Primeiro, vamos esclarecer uma coisa: o ecossistema de contêineres vai além do Docker. As ferramentas e processos pioneiros do Docker foram padronizados pela OCI. O Docker agora é uma implementação das especificações OCI, juntamente com outros sistemas de contêiner suportados, como Podman e Kubernetes.

O Docker Hub é uma plataforma compatível com OCI Registry para fornecer imagens de contêiner. As ferramentas de contêiner OCI podem consumir conteúdo do Docker Hub e outros registros por meio de comandos como docker pull Y docker push. Embora eles funcionassem anteriormente apenas com imagens de contêiner, agora você pode usar o mesmo mecanismo para distribuir os outros componentes do seu aplicativo.

Por que os artefatos genéricos são importantes

Esta funcionalidade está sendo desenvolvida sob a bandeira ORAS. Ele remodela os registros como “armazenamentos de artefatos genéricos” com os quais você pode interagir usando o familiar fluxo de trabalho push/pull.

Um artefato é qualquer coisa que um usuário possa precisar para executar seu software com êxito. Pode ser uma imagem de contêiner ou outro tipo de ativo que faça sentido para o seu projeto:

  • gráficos do leme
  • Binários pré-construídos e pacotes de instalação
  • nascer
  • Configurações de política de segurança recomendadas, como regras OPA
  • Libere assinaturas, certificados e metadados

Esses ativos vitais geralmente podem ser difíceis de encontrar pelos usuários. Eles tendem a estar espalhados por diferentes plataformas de controle de origem, gerenciadores de pacotes e downloads diretos de sites. Com o ORAS, você pode depositar tudo em um registro centralizado e permitir que os usuários recuperem o conteúdo usando um único conjunto de ferramentas e credenciais. Visualizar o SBOM para sua versão v1.1.0 é tão simples quanto oras pull example.com/my-app/sbom:v1.1.0por exemplo.

O ORAS é uma virada de jogo para imagens de contêiner?

ORAS não interrompe nenhuma função de registro de contêiner existente. Você pode continuar executando comandos como docker push my-image:latest para mover suas imagens.

No entanto, há mudanças significativas no armazenamento de conteúdo nos bastidores. ORAS remove a suposição histórica de que todo o conteúdo do registro é uma imagem. Para oferecer suporte a artefatos, os logs devem rastrear o tipo de cada upload concluído. Os diferentes tipos de artefatos são chamados de “tipos de mídia” dentro do ORAS.

Projetos comunitários populares podem registrar seus próprios tipos de mídia para identificar classificações de artefatos comumente usadas, como gráficos Helm. Isso permite que os provedores de registro exibam informações relevantes sobre os artefatos que você armazenou.

O tipo de mídia de imagem de contêiner é usado automaticamente quando você envia de ferramentas existentes, como docker push. Um tipo padrão “desconhecido” é aplicado quando você carrega diretamente do ORAS CLI, a menos que você especifique um tipo registrado.

Instalando o ORAS CLI

Você precisa da ORAS CLI para enviar e receber artefatos com tipos arbitrários. Você pode baixar a versão mais recente na página de lançamentos do GitHub do projeto. Atualmente, apenas os sistemas macOS e Linux são suportados.

Extraia o arquivo baixado e copie o oras binário para um local que esteja no seu caminho:

$ tar -zxf oras_0.16.0_*.tar.gz -C oras-install/
$ mv oras-install/oras /usr/local/bin/
$ rm -rf oras_0.16.0_*.tar.gz oras-install/

Verifique se seu binário funciona executando o oras version domínio:

$ oras version
0.16.0

Agora você está pronto para começar a usar o ORAS.

Usando ORAS com Docker Hub

ORAS é suportado apenas por registros que implementaram suporte para a especificação OCI Artifacts. Esta lista agora inclui a maioria dos principais provedores, incluindo Amazon ECR, Azure, Google e GitHub, bem como instâncias auto-hospedadas implantadas usando a distribuição CNCF.

Usaremos o Docker Hub para este artigo, pois é a solução de registro mais popular. Adicionado suporte completo para artefatos OCI em novembro de 2022.

Entre no seu registro

ORAS reutiliza automaticamente as credenciais de registro que você adicionou anteriormente ao seu ~/.docker/config.json processo. Se precisar fazer login no Docker Hub, você pode executar docker login qualquer oras login para faze-lo:

$ oras login -u username -p password_or_personal_access_token

$ docker login -u username -p password_or_personal_access_token

Em seguida, crie um arquivo simples para carregar no registro. Lembre-se de que não há restrições quanto ao tipo de ativo que você dirige. Este exemplo é um arquivo JSON artificial que descreve o estado do projeto, mas você pode carregar qualquer coisa que seja útil para seus usuários ou desenvolvedores.

$ echo '{"app": "oras-demo", "version": "1.1.0"}' > artifact.json

Agora você está pronto para enviar seu arquivo com o ORAS CLI.

empurre seu artefato

Execute o seguinte comando para aumentar seu artefato, depois de substituir <username> com seu nome de usuário real do Docker Hub:

$ oras push docker.io/<username>/oras-demo:1.1.0 
    artifact.json:application/json 
    --artifact-type application/vnd.unknown.config.v1+json
Uploading 7ac68d8d2a12 artifact.json
Uploaded  7ac68d8d2a12 artifact.json
Pushed docker.io/ilmiont/oras-demo:1.1.0
Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

Existem alguns detalhes dignos de nota neste comando:

  • O primeiro argumento define o registro a ser enviado e o rótulo a ser atribuído ao artefato. Isso é semelhante a enviar uma tag de imagem de contêiner.
  • Diferente docker CLI, ORAS exige que você especifique a URL de registro (docker.io para DockerHub). ORAS é uma ferramenta genérica que não pode fazer suposições sobre o que ou onde você está pressionando.
  • O segundo argumento especifica o caminho para o arquivo que você está carregando filename:content-type Formato. Como o arquivo de amostra é JSON, o application/json o tipo de conteúdo é selecionado.
  • O terceiro argumento especifica o tipo de artefato ORAS (tipo de mídia) a ser atribuído ao seu artefato. Você deve usar um tipo de mídia padrão se estiver carregando um tipo de artefato registrado, como um gráfico Helm, mas o valor padrão de “desconhecido” é apropriado para esta demonstração.

O progresso do upload é exibido em seu terminal, semelhante a um docker push. Tente executar o oras repo tags Comando para confirmar a inserção concluída:

$ oras repo tags docker.io/<username>/oras-demo
1.1.0

Gerenciar artefatos na IU do Docker Hub

Seu artefato também aparecerá no site do Docker Hub. Na lista de Repositórios, você verá Contains: Other para indicar que o repositório contém um artefato genérico. Os repositórios de imagens de contêiner são rotulados como Contains: Image.

Imagem mostrando um artefato genérico no Docker Hub

Selecione o repositório para visualizar seus detalhes, adicionar uma descrição e visualizar todas as tags disponíveis. É semelhante a trabalhar com imagens de contêiner.

Imagem mostrando um artefato genérico no Docker Hub

puxando sua engenhoca

Com seu artefato disponível no registro, agora você pode alternar para outra máquina e repetir as etapas para instalar o ORAS CLI e fazer login na sua conta do Docker Hub. Depois de autenticado, use o oras pull comando para recuperar seus artefatos:

$ oras pull docker.io/<username>/oras-demo:1.1.0
Downloading 7ac68d8d2a12 artifact.json
Downloaded  7ac68d8d2a12 artifact.json
Pulled docker.io/ilmiont/oras-demo:1.1.0
Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

Os arquivos de artefato serão colocados em seu diretório de trabalho:

$ ls
artifact.json

$ cat artifact.json
{"app": "demo-oras", "version": "1.1.0"}

Você usou o ORAS com sucesso para distribuir seus artefatos de aplicativo, usando a infraestrutura existente disponível em seu provedor de registro de contêiner.

Retomar

ORAS transforma registros de imagens de contêineres em plataformas de distribuição genéricas. Você pode enviar qualquer artefato para seu aplicativo e os usuários podem recuperá-lo usando um mecanismo consistente. Isso evita ter que manter, publicar e alternar entre vários canais de entrega.

O suporte ORAS também está sendo adicionado às ferramentas populares do ecossistema. O Helm permite que você envie gráficos diretamente para um registro ORAS usando seu helm push comando, por exemplo. Isso evita ter que exportar manualmente o gráfico para que você possa enviá-lo com oras push. Ele também lida com a configuração do tipo de mídia ORAS correto para você. Você pode esperar mais ferramentas para começar a integrar o ORAS, permitindo que você envie todos os tipos de conteúdo diretamente para seu registro centralizado.

[ad_2]