Enviar e extrair artefatos OCI usando um registro de contêiner do Azure

Você pode usar um registro de contêiner do Azure para armazenar e gerenciar artefatos OCI (Open Container Initiative), bem como imagens de contêiner do Docker e OCI.

Para demonstrar essa capacidade, este artigo mostra como usar a CLI do Registro OCI como Armazenamento (ORAS) para enviar por push um artefato de exemplo - um arquivo de texto - para um registro de contêiner do Azure. Em seguida, puxe o artefato do registro. Você pode gerenciar vários artefatos OCI em um registro de contêiner do Azure usando diferentes ferramentas de linha de comando apropriadas para cada artefato.

Pré-requisitos

  • Registo de contentores do Azure - crie um registos de contentores na sua subscrição do Azure. Por exemplo, use o portal do Azure ou az acr create.
  • CLI do Azure - Versão 2.29.1 ou posterior é necessária. Consulte Instalar a CLI do Azure para instalação e/ou atualização.
  • ORAS CLI - A versão v0.16.0 é necessária. Consulte: Instalação do ORAS.
  • Docker (opcional) - Embora o Docker Desktop não seja necessário, a CLI utiliza o oras armazenamento de credenciais da área de trabalho do Docker para armazenar credenciais. Se o Docker Desktop estiver instalado, ele deverá estar em execução para oras login.

Configurar um registo

Configure variáveis de ambiente para copiar/colar comandos facilmente em seu shell. Os comandos podem ser executados localmente ou no Azure Cloud Shell.

ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io

Iniciar sessão num registo

Autentique-se com sua identidade individual do Microsoft Entra usando um token AD. Use sempre "000..." para o como o USER_NAME token é analisado através da PASSWORD variável.

# Login to Azure
az login

# Login to ACR, using a token based on your Azure identity
USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)

Nota

ACR e ORAS suportam várias opções de autenticação para usuários e automação do sistema. Este artigo usa identidade individual, usando um token do Azure. Para obter mais opções de autenticação, consulte Autenticar com um registro de contêiner do Azure

Iniciar sessão com a ORAS

Forneça as credenciais para oras login.

oras login $REGISTRY \
  --username $USER_NAME \
  --password $PASSWORD

Empurrar um artefato raiz

Um artefato de raiz é um artefato que não subject tem pai. Os artefatos raiz podem ser qualquer coisa, desde uma imagem de contêiner, um gráfico de leme, um arquivo readme para o repositório. Os artefatos de referência, descritos em Anexar, empurrar e puxar artefatos da cadeia de suprimentos são artefatos que se referem a outro artefato. Os artefatos de referência podem ser qualquer coisa, desde uma assinatura, lista de materiais de software, relatório de digitalização ou outros tipos em evolução.

Para este exemplo, crie conteúdo que represente um arquivo de marcação:

echo 'Readme Content' > readme.md

A etapa a seguir envia o readme.md arquivo para <myregistry>.azurecr.io/samples/artifact:readme.

  • O registro é identificado com o nome <myregistry>.azurecr.io do registro totalmente qualificado (todas minúsculas), seguido pelo namespace e repo: /samples/artifact.
  • O artefato é marcado :readme, para identificá-lo exclusivamente a partir de outros artefatos listados no repositório (:latest, :v1, :v1.0.1).
  • A configuração --artifact-type readme/example diferencia o artefato de uma imagem de contêiner, que usa application/vnd.oci.image.config.v1+json.
  • O ./readme.md identifica o arquivo carregado e o representa o :application/markdownIANA mediaType do arquivo.
    Para obter mais informações, consulte OCI Artifact Authors Guidance.

Use o comando para enviar o oras push arquivo para o registro.

Linux, WSL2 ou macOS

oras push $REGISTRY/samples/artifact:readme \
    --artifact-type readme/example \
    ./readme.md:application/markdown

Windows

.\oras.exe push $REGISTRY/samples/artifact:readme ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown

A saída para um push bem-sucedido é semelhante à seguinte saída:

Uploading 2fdeac43552b readme.md
Uploaded  2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1aec5d9dcf7748dd702682d53

Enviar por push um artefato raiz de vários arquivos

Quando os artefatos OCI são enviados por push para um registro com ORAS, cada referência de arquivo é enviada por push como um blob. Para enviar blobs separados, faça referência aos arquivos individualmente ou à coleção de arquivos fazendo referência a um diretório.
Para obter mais informações sobre como enviar por push uma coleção de arquivos, consulte Enviando artefatos por push com vários arquivos

Crie algumas documentações para o repositório:

echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md

Empurre o artefato de vários arquivos:

Linux, WSL2 ou macOS

oras push $REGISTRY/samples/artifact:readme \
    --artifact-type readme/example\
    ./readme.md:application/markdown\
    ./details

Windows

.\oras.exe push $REGISTRY/samples/artifact:readme ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown ^
    .\details

Descubra o manifesto

Para exibir o manifesto criado como resultado do oras push, use oras manifest fetch:

oras manifest fetch --pretty $REGISTRY/samples/artifact:readme

A saída será semelhante a:

{
  "mediaType": "application/vnd.oci.artifact.manifest.v1+json",
  "artifactType": "readme/example",
  "blobs": [
    {
      "mediaType": "application/markdown",
      "digest": "sha256:2fdeac43552b71eb9db534137714c7bad86b53a93c56ca96d4850c9b41b777fc",
      "size": 15,
      "annotations": {
        "org.opencontainers.image.title": "readme.md"
      }
    },
    {
      "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
      "digest": "sha256:0d6c7434a34f6854f971487621426332e6c0fda08040b9e6cc8a93f354cee0b1",
      "size": 189,
      "annotations": {
        "io.deis.oras.content.digest": "sha256:11eceb2e7ac3183ec9109003a7389468ec73ad5ceaec0c4edad0c1b664c5593a",
        "io.deis.oras.content.unpack": "true",
        "org.opencontainers.image.title": "details"
      }
    }
  ],
  "annotations": {
    "org.opencontainers.artifact.created": "2023-01-10T14:44:06Z"
  }
}

Puxe um artefato de raiz

Criar um diretório limpo para download

mkdir ./download

Execute o comando para extrair o oras pull artefato do seu registro.

oras pull -o ./download $REGISTRY/samples/artifact:readme

Ver os ficheiros retirados

tree ./download

Remover o artefato (opcional)

Para remover o artefato do registro, use o oras manifest delete comando.

 oras manifest delete $REGISTRY/samples/artifact:readme

Próximos passos