GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Che cos'è un manifesto di immagine Docker?

I manifesti Docker descrivono i livelli all'interno di un'immagine. Un manifest consente il confronto esatto di due immagini, anche se a cui sono assegnati tag diversi.

I manifest sono espressi in JSON e contengono informazioni sui livelli e sulle architetture dell'immagine. Il client Docker utilizza manifesti per determinare se un'immagine è compatibile con il dispositivo corrente. Quindi utilizza le informazioni per determinare come avviare nuovi contenitori.

Il formato manifesto

Lo schema manifest è attualmente alla versione 2. Un file completo dichiarerà la sua versione dello schema e quindi un elenco di voci manifest disponibili per l'immagine. Ogni voce rappresenta una variante diversa dell'immagine, come x86 e ARM64.

Puoi visualizzare il manifest di qualsiasi immagine utilizzando il docker manifest inspect comando. Funziona sia con le immagini locali che con le immagini archiviate su un registro remoto come Docker Hub.

docker manifest inspect my-image:latest

Il manifest è un elenco di livelli inclusi nell'immagine. Puoi vedere l'hash del contenuto del livello e le sue dimensioni complessive.

Se aggiungi il --verbose flag, otterrai ancora più informazioni sull'immagine. Ciò include il tag dell'immagine (in Ref campo), la sua architettura e il suo sistema operativo.

Docker non caricherà i dettagli manifest da registri non sicuri per impostazione predefinita. Se devi utilizzare un registro protetto in modo non corretto, aggiungi il --insecure segnala al tuo docker manifest comandi.

Manifests e build multi-arco

Storicamente, Docker non supportava più architetture di immagini. Le immagini possono essere utilizzate solo su macchine con la stessa architettura di quella su cui sono state costruite. Ciò si è rapidamente rivelato limitante poiché Docker ha trovato un maggiore utilizzo negli ambienti server e sui nuovi computer basati su ARM.

Oltre a consentire l'identificazione univoca delle immagini, i manifest facilitano le build multi-architettura. Se esamini un'immagine che supporta più architetture, vedrai un output manifest leggermente diverso:

docker manifest inspect php:latest

L'esecuzione del comando precedente visualizzerà il manifest per l'immagine Docker PHP ufficiale. Puoi vedere dallo screenshot che sono disponibili diverse opzioni di piattaforma, tra cui AMD64 e ARM. Abbiamo troncato l'elenco completo che in realtà include otto diverse architetture supportate.

I manifesti consentono agli autori di immagini di pubblicizzare il supporto per più architetture sotto un unico tag immagine. Il client Docker seleziona la versione dell'immagine appropriata per la sua piattaforma, in base alle opzioni nell'elenco. Si prevede che gli autori raggrupperanno solo le immagini che offrono funzionalità identiche:non dovrebbero esserci modifiche oltre all'architettura o al sistema operativo di destinazione.

Ciascuna architettura nell'elenco fa riferimento a un'altra manifest tramite il suo digest campo. Il manifest di riferimento sarà un normale file a architettura singola. Docker abbina la piattaforma corrente al manifest single-arch corretto, quindi carica il file per determinare l'elenco finale dei livelli dell'immagine.

Puoi creare manualmente immagini multi-architettura utilizzando il docker manifest comando. Crea ciascuna delle singole immagini e inviale a un registro. Quindi usa la docker manifest create comando per combinare le immagini in un nuovo manifest condiviso sotto un unico tag.

# on an AMD64 machine
docker build -t my-image:amd64 .
docker push my-image:amd64

# on an ARM machine
docker build -t my-image:arm .
docker push my-image:arm

# now combine the manifests
docker manifest create my-image:latest 
--amend my-image:x64
--amend my-image:arm
docker manifest push my-image:latest

Usando manifest create con il --amend flag ti consente di unire più manifest indipendenti insieme. Il manifest finale viene quindi inviato a Docker Hub con l'latest etichetta. Gli utenti AMD64 e ARM saranno entrambi in grado di creare contenitori da questa immagine.

L'assemblaggio manuale di immagini multi-arcata non è obbligatorio. Puoi usare il buildx comando invece per semplificare notevolmente il processo.

docker buildx build --platform linux/amd64,linux/arm64/v8 --tag my-image:latest

Questo singolo comando si traduce in un'immagine che funziona su entrambe le piattaforme AMD64 e ARM64. Sotto il cofano, sta ancora producendo un elenco manifest multi-arch, quindi è utile capire il funzionamento interno di come le immagini vengono collegate tra loro.

Annotazione dei manifesti

Docker ti consente di sovrascrivere manualmente i dati manifest tramite le annotazioni. I campi supportati includono informazioni sull'architettura e sul sistema operativo.

Usa l'docker manifest annotate comando per impostare le annotazioni. Se stai annotando un'immagine a architettura singola, fornisci un tag immagine che faccia riferimento ad essa. Per le immagini multi-arch, avrai bisogno sia del tag immagine generale che del tag del singolo manifest all'interno dell'elenco dei manifest multi-arch.

docker manifest annotate my-image:latest my-image:amd64 --os-version linux

Questo comando contrassegna la versione AMD64 di my-image:latest immagine come contenitore basato su Linux.

Le annotazioni spesso non devono essere impostate manualmente. Di solito vengono dedotti automaticamente dall'ambiente di compilazione. Puoi usare l'annotate comando per aggiungere campi mancanti o modificare la configurazione dell'immagine in futuro.

Riepilogo

I manifesti Docker descrivono i livelli di un'immagine e le architetture che supporta. Un manifest può essere un'architettura singola, che supporta una piattaforma specifica, o multi-architettura. In quest'ultimo caso, il file contiene un elenco di riferimenti ai manifest single-arch che incorpora.

L'interazione manuale con i manifest dovrebbe essere rara, ma è possibile con il docker manifest gruppo di comando. Ora è più comune automatizzare build multi-arch tramite Buildx, che offre un'esperienza di assemblaggio manifest semplificata.


Docker
  1. Che cos'è Docker (e contenitori Linux?)

  2. Estrarre il file dall'immagine Docker?

  3. Come utilizzare un Dockerfile per creare un'immagine Docker

  4. Cosa c'è di nuovo in Docker Compose v2?

  5. Aggiornamento di un container distribuito in base a un'immagine Docker

Che cos'è un manifesto di immagine Docker?

Distribuire un'installazione di MariaDB di Production Docker

Come ridurre le dimensioni dell'immagine Docker nei contenitori Docker

Docker File vs Docker Compose:qual è la differenza?

Condivisione di immagini Docker su Docker Hub

Cosa fare se un container Docker esce immediatamente