Condividi tramite


Informazioni su registri, repository e artefatti

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

Registro, repository ed artefatti

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 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, il Registro Azure Container supporta una gamma di artefatti di contenuto, tra cui grafici Helm e formati di immagine OCI (Open Container Initiative).

Archivio

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, Usando nomi delimitati da barre, è possibile identificare i repository correlati e la proprietà degli artefatti nell'organizzazione. 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:20230604
  • product-returns/legacy-integrator:20230715

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

Elemento

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. È possibile assegnare uno o più tag a un singolo artefatto all'interno di un repository. È anche possibile "annullare il tag" di un artefatto eliminando tutti i tag da un'immagine mantenendo i dati dell'immagine (relativi livelli) 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.

La modalità di assegnazione di tag alle immagini del contenitore dipende dallo scenario per lo sviluppo o la distribuzione. Ad esempio, usare tag stabili per mantenere le immagini di base e usare tag univoci per la distribuzione delle immagini. Per altre informazioni, vedere Consigli per l'assegnazione di tag e il controllo della versione 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 di sistema condividono livelli comuni, aumentando così l'efficienza di archiviazione. Ad esempio, diverse immagini in repository diversi potrebbero avere un livello di base ASP.NET Core comune, ma il Registro di sistema archivia una sola 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 garantire isolamento sicuro e protezione da potenziali manipolazioni dei livelli, i registri non condividono i livelli.

manifesto

Ogni immagine del contenitore o artefatto di cui si esegue il push in un registro contenitori ha un manifesto. Il registro genera il manifesto quando si esegue il push del contenuto. Il manifesto 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"
    }
  ]
}

Usare il comando Azure CLI az acr manifest list-metadata per elencare i manifest di un repository:

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

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

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

Hash di manifesto

I manifesti hanno un hash SHA-256 univoco denominato digest manifesto. Ogni immagine o artefatto, se contrassegnato o meno, ha un proprio digest. Il valore del digest è univoco anche se i dati dei livelli di un artefatto corrispondono a quelli di un altro artefatto. Questa funzionalità consente di eseguire il push di immagini con tag identici in un registro senza problemi. Ad esempio, è possibile eseguire il push di myimage:latest nel registro più e più volte senza errori poiché ogni immagine ha il suo relativo hash univoco.

È possibile eseguire il pull di un artefatto da un registro aggiungendo il digest nell'operazione. Alcuni sistemi potrebbero essere configurati per eseguire il pull utilizzando il digest, perché questo garantisce la versione dell'immagine che si sta scaricando, anche se, in seguito, si carica un'immagine con lo stesso tag nel registro.

Importante

Se si esegue ripetutamente il push degli artefatti modificati con tag identici, è possibile creare orfani: artefatti senza tag ma che usano ancora lo spazio nel Registro di sistema. Le immagini senza tag non vengono visualizzate nell'interfaccia della riga di comando di Azure o nel portale di Azure quando si elencano o visualizzano immagini per tag. Tuttavia, i livelli esistono ancora e usano spazio nel Registro di sistema. L'eliminazione di un'immagine senza tag libera lo spazio del Registro di sistema quando il manifesto è l'unico o l'ultimo che punta a un determinato livello. Per informazioni su come liberare spazio usato dalle immagini senza tag, vedere Eliminare immagini del contenitore in Registro Azure Container.

Indirizzare un artefatto

Per indirizzare un artefatto del registro per operazioni push e pull usando Docker o altri strumenti client, combinare il nome completo del registro, il nome del repository (incluso il percorso dello spazio dei nomi, se applicabile) e un tag artefatto o un digest del manifesto. Il formato generale è:

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

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

Quando si usa Docker o altri strumenti client per eseguire il pull o il push di artefatti in un registro contenitori di Azure, utilizzare l'URL completo del registro, detto anche nome del server di accesso. Nel cloud di Azure l'URL completo di un registro contenitori di Azure ha il formato myregistry.azurecr.io (tutto minuscolo). Il tag latest viene usato per impostazione predefinita se non si specifica un tag nel comando.

Note

Non è possibile specificare un numero di porta nell'URL del server di accesso del registro, ad esempio myregistry.azurecr.io:443.

Esempi di operazioni di push utilizzando tag:

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

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

Esempio di estrazione per tag:

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

Esempio di estrazione tramite digest del manifesto:

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

Passaggi successivi