GNU/Linux >> Linux Esercitazione >  >> Linux

7 divertenti contenitori Linux/caratteristiche di trasporto di immagini

Un aspetto interessante dell'utilizzo di strumenti contenitore come Podman, Buildah, CRI-O e Skopeo è che si basano sulla stessa libreria per estrarre e spingere le immagini, ovvero contenitori/immagine. Descrivo spesso i containers/image progetto come libreria per la copia di immagini tra diversi tipi di storage container. Questo spazio di archiviazione può trovarsi in un registro di container, in container/storage, come oggetti del file system come directory o tarball e persino direttamente nel daemon Docker. Il meccanismo per spostare queste immagini container tra i diversi tipi di storage container è chiamato trasporto . Una delle caratteristiche meno conosciute di containers/image sono i vari trasporti che supporta.

Trasporti

L'immagine viene specificata utilizzando un transport:ImageName formato. Se non viene specificato alcun trasporto, il docker (Registro contenitori) il trasporto viene utilizzato per impostazione predefinita in tutti gli strumenti diversi da Skopeo. Skopeo richiede agli utenti di impostare sempre il trasporto.

Una delle cose interessanti che Docker ha fatto è stata inventare l'idea di un registro di contenitori , che è fondamentalmente un server Web che contiene immagini di container. Docker.io, quay.io e Artifactory sono tutti esempi di registri di container. Il team di ingegneri di Docker ha definito un protocollo per estrarre e inviare queste immagini dai registri dei container, che chiamiamo docker trasporto.

[ Potrebbero interessarti anche: 12 guide Podman per iniziare con i container ]

docker://riferimento-docker

Un riferimento a un'immagine viene archiviato in un registro di immagini del contenitore remoto. Esempio:quay.io/podman/stable:latest . Il riferimento può includere un nome host in un registro specifico.

$ skopeo copy docker://docker.io/alpine dir:/tmp/alpine
$ podman run docker://registry.fedoraproject.org/fedora:latest echo hello

Per Podman e Buildah, docker:// è il trasporto predefinito. Può essere lasciato cadere per comodità:

$ podman pull registry.fedoraproject.org/fedora:latest

Quando si utilizza un nome breve per estrarre un'immagine come fedora , Podman e Buildah utilizzano l'elenco dei registri per creare un riferimento Docker e quindi lo chiamano utilizzando il docker:// trasporto.

Containers/image supporta anche molti altri trasporti per la copia e la memorizzazione di immagini contenitore.

oci:percorso

Il oci transport esporta/importa il contenuto di un'immagine del contenitore in una directory locale, presupponendo che l'immagine sia conforme alla specifica del layout dell'immagine del contenitore aperto. I tarball manifest e layer vengono esportati nella directory come file singoli.

$ skopeo copy oci:/tmp/myimage docker://registry.example.com/myimage
$ podman run oci:/tmp/fedora echo hello

dir

La dir transport esegue il dump del contenuto di un'immagine del contenitore in una directory locale, sempre supponendo che l'immagine sia conforme al layout dell'immagine Docker. Il manifest, i tarball di livello e le firme vengono esportati come singoli file nella directory. Questo è un formato non standardizzato, utile principalmente per il debug o l'ispezione non invasiva dei contenitori. È molto simile a oci trasporto ma archivia i file utilizzando il formato Docker legacy.

$ podman save --format docker-dir fedora -o /tmp/fedora
$ podman run dir:/tmp/fedora echo hello

archivio mobile

Un altro modo che gli ingegneri Docker hanno sviluppato per archiviare e trasportare le immagini dei container in giro è l'utilizzo di tar . Un tarball contiene tutti i file che compongono un'immagine contenitore. Questi tarball sono stati originariamente creati utilizzando il docker save e podman save comandi. Potrebbero essere ricaricati nella memoria locale del motore del contenitore utilizzando docker load e podman load . Il container/image library trasforma questo formato di archivio in un trasporto, consentendo di utilizzarlo direttamente da altri comandi come podman run dir:/tmp/fedora.tag echo hello o buildah from dir:/tmp/fedora.tar

$ skopeo copy docker://registry.fedoraproject.org/fedora:latest docker-archive:/tmp/fedora.img
$ podman run docker-archive:/tmp/fedora.img echo hello

Avviso :Utilizzo di docker-archive non è quasi mai la cosa giusta da fare. Il formato è molto dispendioso sia per l'archiviazione che per l'I/O. Consiglierei agli utenti di eseguire una docker/distribution temporanea registro invece.

oci-archivio

Questo formato è simile a docker-archive , ma invece di essere il formato legacy, memorizzerà una singola immagine in formato OCI. Il percorso è un'immagine conforme alla specifica Open Container Image Layout in una directory nel percorso specificato ed etichettata con un tag.

$ skopeo copy docker-archive:/tmp/fedora.img oci-archive:/tmp/fedora-oci.img
$ podman run oci-archive:/tmp/fedora-oci.img echo hello

demone mobile

Una delle funzionalità più interessanti di containers/image è il supporto per il docker-daemon trasporto. Docker e Podman non condividono lo stesso spazio di archiviazione. Non possono perché Docker controlla il blocco della sua memoria all'interno del demone. Sebbene Podman, Buildah, CRI-O e Skopeo possano condividere contenuti, utilizzano il file system tramite containers/storage .

Podman e gli altri strumenti possono funzionare con il docker-daemon archiviazione indirettamente, tramite il docker-daemon trasporto. Ciò consente ai motori del contenitore di accedere direttamente alle immagini precedentemente estratte dal demone Docker o alle immagini create da docker build . Puoi anche spostare le immagini create da Buildah e Podman direttamente nel demone Docker.

Qualcosa del genere:

podman run docker-daemon:alpine echo hello

Nota :Podman sta estraendo l'immagine dal demone Docker, salvandola in containers/storage , quindi eseguire il contenitore. Non utilizza direttamente la memoria Docker. Per consentire a Podman di comunicare con Docker, dobbiamo eseguirlo come root poiché il demone Docker richiede i privilegi di root.

$ sudo docker pull fedora
$ sudo podman run docker-daemon:docker.io/library/fedora echo hello

Se crei un'immagine tramite buildah , puoi salvare l'immagine direttamente nel docker-daemon :

# ctr=$(buildah from fedora)
# mnt=$(buildah mount $ctr)
# install -m 0744 start.sh $/mnt
# buildah commit $ctr docker-damon:myimage

Nota :Anche se è bello usare il docker-daemon trasporto come questo, è una caratteristica di ultima istanza con costi di I/O e storage molto elevati. Consolidamento del processo da eseguire nell'uno o nell'altro storage/ecosystem è quasi sempre meglio. Ad esempio, sarebbe meglio estrarre l'immagine dal demone Docker e quindi utilizzare semplicemente containers/storage per eseguirlo.

$ sudo podman pull docker-daemon:registry.fedoraproject.org/library/fedora
$ podman run fedora echo hello

contenitori-stoccaggio

Il "trasporto" finale in realtà non è affatto un trasporto, ma più un meccanismo per memorizzare un'immagine in un archivio locale creato usando i containers/storage biblioteca. Il formato di docker-reference è descritto in dettaglio nel trasporto Docker.

$ skopeo copy docker://registry.access.redhat.com/ubi8:latest containers-storage:ubi8:latest

Buildah e Podman per impostazione predefinita archiviano le loro immagini in un contenitore:

$ podman image pull ubi8

Il comando Podman sopra espande i nomi brevi per ubi8 a registry.access.redhat.com/ubi8:latest e quindi utilizza il docker:// transport per estrarlo da registry.access.redhat.com . Quindi memorizza il contenuto direttamente in containers/storage .

$ buildah push docker://quay.io/myrepo/myimage

Il comando Buildah sopra esamina lo spazio di archiviazione del contenitore e quindi esegue il push dell'immagine utilizzando il docker:// trasporto al registro di quay.io.

[ Iniziare con i container? Dai un'occhiata a questo corso gratuito. Distribuzione di applicazioni containerizzate:una panoramica tecnica. ]

Conclusione

I containers/image La libreria fornisce un modo eccellente per trasferire le immagini del contenitore tra macchine e diversi tipi di archiviazione. È parte integrante dei motori dei container e fornisce alcune funzionalità davvero interessanti. Per favore approfondisci meglio i trasporti usando la pagina man di container-transports.


Linux
  1. Come creare, elencare ed eliminare contenitori Docker su Linux

  2. Come elencare i contenitori Docker

  3. Come creare un'immagine personalizzata da un contenitore Docker

  4. La finestra mobile può essere eseguita all'interno di un contenitore Linux?

  5. Cosa c'è all'interno di un'immagine/contenitore Docker?

Immagine Docker vs Container:le principali differenze

Introduzione alla gestione dei container Linux

Come installare AlmaLinux 8 Image in Docker Container

Come eseguire i contenitori Docker

Aggiornamento dei contenitori Docker con tempi di inattività pari a zero o minimi

Come gestire i container Docker