Informazioni su registri, repository e artefatti

Questo articolo presenta i concetti chiave dei registri contenitori, dei repository e delle immagini del contenitore e degli artefatti correlati.

Registry, repositories, and artifacts

Registro

Un registro contenitori è un servizio che archivia e distribuisce immagini del contenitore e artefatti correlati. Docker Hub è un esempio di registro contenitori pubblico che funge da catalogo generale di immagini del contenitore Docker. Registro Azure Container offre agli utenti il controllo diretto del contenuto del contenitore, con l'autenticazione integrata, la replica geografica che supporta la distribuzione globale e l'affidabilità per le distribuzioni di chiusura della rete, la configurazione della rete virtuale con collegamento privato, il blocco dei tag e molte altre funzionalità avanzate.

Oltre alle immagini del contenitore compatibili con Docker, Registro Azure Container supporta una gamma di artefatti di contenuto, tra cui grafici Helm e formati di immagine OCI (Open Container Initiative).

Repository

Un repository è una raccolta di immagini contenitore o di altri artefatti in un registro con lo stesso nome, ma tag diversi. Ad esempio, nel repository sono presenti acr-helloworld le tre immagini seguenti:

  • acr-helloworld:latest
  • acr-helloworld:v1
  • acr-helloworld:v2

I nomi dei repository possono anche includere spazi dei nomi, Gli spazi dei nomi consentono di identificare i repository correlati e la titolarità degli artefatti nell'organizzazione usando nomi delimitati da barre. Tuttavia, il registro gestisce tutti i repository in modo indipendente, non come gerarchia. Ad esempio:

  • marketing/campaign10-18/web:v2
  • marketing/campaign10-18/api:v3
  • marketing/campaign10-18/email-sender:v2
  • product-returns/web-submission:20180604
  • product-returns/legacy-integrator:20180715

I nomi dei repository possono includere solo caratteri alfanumerici minuscoli, punti, trattini, caratteri di sottolineatura e barre.

Artefatto

Un'immagine del contenitore o un altro artefatto incluso in un registro è associato a uno o più tag, presenta uno o più livelli ed è identificato da un manifesto. La comprensione della correlazione di questi componenti gli uni con gli altri può aiutare a gestire il registro in modo efficiente.

Tag

Il tag per un'immagine o un altro artefatto specifica la relativa versione. A un singolo artefatto all'interno di un repository è possibile assegnare uno o più tag e può anche essere "senza tag". Ciò significa che è possibile eliminare tutti i tag da un'immagine, mentre i dati dell'immagine (relativi livelli) rimangono nel Registro di sistema.

Il repository (o il repository e lo spazio dei nomi) più un tag definiscono il nome di un'immagine. È possibile eseguire il push e il pull di un'immagine specificandone il nome nell'operazione di push o pull. Il tag latest viene usato per impostazione predefinita se non ne viene fornito uno nei comandi Docker.

L'assegnazione di tag alle immagini del contenitore è determinata dagli scenari di sviluppo o distribuzione. Ad esempio, è consigliabile usare tag stabili per gestire le immagini di base e tag univoci per distribuire le immagini. Per altre informazioni, vedere Consigli per l'assegnazione di tag e il controllo delle versioni delle immagini del contenitore.

Per le regole di denominazione dei tag, vedere la documentazione di Docker.

Livello

Le immagini e gli artefatti del contenitore sono costituiti da uno o più livelli. Tipi diversi di artefatto definiscono livelli in modo specifico. Ad esempio, in un'immagine del contenitore Docker ogni livello corrisponde a una riga nel Dockerfile che definisce l'immagine:

Layers of a container image

Gli artefatti in un registro condividono livelli comuni, migliorando l'efficienza dell'archiviazione. Ad esempio, più immagini in repository diversi possono avere un livello di base ASP.NET Core comune, ma nel registro viene archiviata solo una copia di tale livello. La condivisione dei livelli ne ottimizza anche la distribuzione nei nodi, con più artefatti che condividono livelli comuni. Se un'immagine già presente in un nodo include il livello ASP.NET Core come base, il pull successivo di un'immagine diversa che fa riferimento allo stesso livello non trasferisce il livello al nodo. Fa invece riferimento al livello che esiste già nel nodo.

Per fornire protezione e isolamento sicuro dalla possibile manipolazione dei livelli, i livelli non vengono condivisi tra registri.

Manifesto

Ogni immagine del contenitore o artefatto sottoposto a push in un registro contenitori è associato a un manifesto. Il manifesto, generato dal registro durante il push del contenuto, identifica in modo univoco gli artefatti e specifica i livelli.

Un manifesto di base per un'immagine Linux hello-world è simile al seguente:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 977,
      "digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
    }
  ]
}

È possibile elencare i manifesti per un repository con il comando dell'interfaccia della riga di comando di Azure az acr manifest list-metadata:

az acr manifest list-metadata --name <repositoryName> --registry <acrName>

Ad esempio, elencare i manifesti per il repository "acr-helloworld":

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2018-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2018-07-12T15:50:53.5372468Z"
  },
  {
    "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
    "tags": [
      "v1"
    ],
    "timestamp": "2018-07-11T21:38:35.9170967Z"
  }
]

Hash di manifesto

I manifesti sono identificati da un hash SHA-256 univoco, l'hash di manifesto. Ogni immagine o artefatto, indipendentemente dal fatto che sia contrassegnato o meno, sia identificato dal digest. Il valore digest è univoco anche se i dati del livello dell'artefatto sono identici a quello di un altro artefatto. Questo meccanismo consente quindi di eseguire ripetutamente il push di immagini con tag identici in un registro. Ad esempio, è possibile eseguire più volte il push di myimage:latest nel registro senza errori poiché ogni immagine viene identificata dal relativo hash univoco.

È possibile eseguire il pull di un artefatto da un registro specificandone il digest nell'operazione pull. Alcuni sistemi possono essere configurati per eseguire il pull tramite digest perché garantisce il pull della versione dell'immagine, anche se un'immagine con tag identica viene inserita in un secondo momento nel Registro di sistema.

Importante

Se si esegue ripetutamente il push degli artefatti modificati con tag identici, è possibile creare "orfani"--artefatti senza tag, ma che usano ancora spazio nel Registro di sistema. Le immagini senza tag non vengono visualizzate nell'interfaccia della riga di comando o nel portale di Azure quando si elencano o si visualizzano le immagini in base ai tag. Tuttavia, i loro livelli sono comunque presenti e occupano spazio nel registro. Se si elimina un'immagine senza tag, lo spazio del Registro di sistema viene liberato quando il manifesto è l'unico o l'ultimo, che punta a un determinato livello. Per informazioni sulla liberazione dello spazio usato dalle immagini senza tag, vedere Eliminare immagini del contenitore in Registro Azure Container.

Indirizzamento di un artefatto

Per risolvere un artefatto del Registro di sistema per le operazioni push e pull con Docker o altri strumenti client, combinare il nome completo del Registro di sistema, il nome del repository (incluso il percorso dello spazio dei nomi, se applicabile) e un tag di artefatto o un digest del manifesto. Per le spiegazioni di questi termini, vedere le sezioni precedenti.

Indirizzo per tag: [loginServerUrl]/[repository][:tag]

Indirizzo per digest: [loginServerUrl]/[repository@sha256][:digest]

Quando si usa Docker o altri strumenti client per eseguire il pull o il push di elementi in un registro Azure Container, usare l'URL completo del Registro di sistema, detto anche nome del server di accesso. Nel cloud di Azure l'URL completo di un Registro Azure Container è nel formato myregistry.azurecr.io (tutto in minuscolo).

Nota

  • Non è possibile specificare un numero di porta nell'URL del server di accesso del Registro di sistema, ad esempio myregistry.azurecr.io:443.
  • Il tag latest viene usato per impostazione predefinita se non si specifica un tag nel comando.

Push per tag

Esempi:

docker push myregistry.azurecr.io/samples/myimage:20210106

docker push myregistry.azurecr.io/marketing/email-sender

Pull per tag

Esempio:

docker pull myregistry.azurecr.io/marketing/campaign10-18/email-sender:v2

Eseguire il pull in base al digest del manifesto

Esempio:

docker pull myregistry.azurecr.io/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108

Passaggi successivi

Altre informazioni sull'archiviazione del Registro di sistema e sui formati di contenuto supportati in Registro Azure Container.

Informazioni su come eseguire il push e il pull delle immagini da Registro Azure Container.