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.

Registro di sistema, repository ed artefatti

Registro

Un contenitore registro è 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 di tag e molte altre funzionalità avanzate.

Oltre alle immagini dei contenitori compatibili con Docker, Registro Azure Container supporta un'ampia gamma di elementi di contenuto, tra cui grafici Helm e formati di immagine OCI (Open Container Initiative).

Repository

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

  • 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 possono essere assegnati uno o più tag, che possono anche essere eliminati. Quando si eliminano tutti i tag da un'immagine, i dati dell'immagine (ovvero i relativi livelli) rimangono comunque nel registro.

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 Raccomandazioni 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:

Livelli di un'immagine del contenitore

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

A ogni immagine del contenitore o artefatto inserita in un registro contenitori viene associato 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 hello-world Linux è 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, è identificato dal digest. Il valore dell'hash è univoco anche se i dati dei livelli dell'artefatto sono identici a quelli di un altro. 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 l'hash nell'operazione. Alcuni sistemi sono configurati per eseguire il pull tramite hash perché in questo modo viene garantita la versione dell'immagine in questione, anche se in seguito viene eseguito il push nel registro di un'immagine con gli stessi tag.

Importante

Se si esegue ripetutamente il push di artefatti modificate con tag identici, è possibile che vengano creati artefatti orfani, ovvero privi di tag, che occupano comunque spazio nel registro. 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.