Quando hai bisogno dello strumento giusto, non c'è niente come andare al tuo negozio di ferramenta locale e camminare per i corridoi. È fantastico scendere lungo il corridoio degli utensili manuali e controllare tutti i cacciaviti, i martelli, le chiavi esagonali, i metro a nastro e altro ancora. Proprio quando pensi di aver scoperto l'utensile giusto, ti viene in mente un pensiero, se posso farlo con un utensile manuale, posso davvero farlo con l'utensile elettrico perfetto!
Almeno questo è quello che mi dice mia moglie e, vedi, è la persona a portata di mano della nostra famiglia. I miei strumenti preferiti sono strumenti tecnologici. Dammi un corridoio di schede video in un negozio di computer e sarò un campeggiatore felice.
Di recente ho fatto una demo al Podman Community Meeting per mostrare alcuni dei nuovi e più brillanti strumenti container che abbiamo sviluppato per Podman e Buildah. Abbiamo avuto molti grandi annunci con Podman v3.0, quindi ho pensato che alcuni di questi strumenti avrebbero potuto essere oscurati. Dato che ho ricevuto un bel feedback da quella dimostrazione, ho sentito che anche un post di follow-up potrebbe essere utile. Quindi tuffiamoci ed esploriamo questi nuovi scintillanti strumenti contenitore.
Cambia il primo FROM nel tuo Containerfile
C'è un nuovo --from
opzione nel buildah bud
comando che presto entrerà in Podman v3.0. Questa opzione ti consente di sostituire il valore associato al primo e solo al primo DA istruzione nel file contenitore. Ad esempio, se abbiamo questo Containerfile:
# cat ~/Containerfile.multifrom
FROM fedora as builder
FROM busybox
COPY --from=builder /bin/df /tmp/df_tester
Possiamo fare una corsa iniziale e mostrerà che abbiamo usato il fedora
immagine contenitore. Quindi il busybox
viene utilizzata l'immagine e infine copiando i file da fedora
/bin/df
di directory nella busybox
/tmp/df_tester
delle immagini directory.
# buildah bud -t multi -f ~/Containerfile.multifrom .
STEP 1: FROM fedora AS builder
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 157ab8011454 done
Copying config 9f2a560376 done
Writing manifest to image destination
Storing signatures
--> 9f2a5603764
STEP 2: FROM busybox
Resolved "busybox" as an alias (/root/.config/containers/short-name-aliases.conf)
Getting image source signatures
Copying blob 4c892f00285e done
Copying config 22667f5368 done
Writing manifest to image destination
Storing signatures
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists
Copying blob 9b68b051b385 done
Copying config 187c956137 done
Writing manifest to image destination
Storing signatures
--> 187c9561378
187c9561378efb043dfd0e8fa9c0afbdc0cf2faeb244e0dd7f2003321feab524
Ora immagina una situazione più reale, quella in cui il tuo DA istruzione punta a un'immagine personalizzata con una varietà di tag per diverse versioni dell'immagine. Sarebbe utile, soprattutto in un ambiente CI, passare semplicemente l'immagine del contenitore che si desidera utilizzare nell'esecuzione successiva anziché ricreare l'intero Dockerfile. Questo è il lavoro che --from
riempie.
In questo esempio, eseguiremo lo stesso bud
command, ma questa volta aggiungeremo --from alpine:latest
.
# buildah bud -t multi -f ~/Containerfile.multifrom --from alpine:latest .
STEP 1: FROM alpine:latest AS builder
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 4c0d98bf9879 done
Copying config e50c909a8d done
Writing manifest to image destination
Storing signatures
--> e50c909a8df
STEP 2: FROM busybox
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists
Copying blob b498f23d5c32 done
Copying config d7e92107ed done
Writing manifest to image destination
Storing signatures
--> d7e92107edf
d7e92107edf42f046f6a7faddade4825ef1c2361ae21eb0ac3694871dcdb496c
Puoi vedere che il alpine:latest
l'immagine del contenitore è stata utilizzata per la prima volta e ora dopo la busybox
immagine è stata creata, i file da /bin/df
di alpine sono stati copiati nel /tmp/df_tester
directory su busybox
. Il valore del primo DA L'istruzione nel Containerfile è stata sostituita con l'argomento passato con il --from
opzione.
[ Potresti anche leggere: Contenitori rootless utilizzando Podman ]
Accetta input durante una build
Un altro nuovo strumento è --stdin
opzione che accompagna buildah bud
o podman build
(a partire da Podman v3.0). Quando utilizzi questa opzione, il processo di compilazione si interrompe e chiede l'input da tastiera se il processo in esecuzione durante la procedura di compilazione lo richiede.
Dai un'occhiata a questo Containerfile:
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
Questo Containerfile usa ubi8
image e quindi installa iputils
. Come probabilmente puoi intuire, il yum
comando ci chiederà di verificare l'installazione di iputils
. Diamo un'occhiata a cosa succede senza --stdin
opzione in gioco.
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
# buildah bud -t mystdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob d9e72d058dc5 done
Copying blob cca21acb641a done
Copying config 3269c37eae done
Writing manifest to image destination
Storing signatures
STEP 2: RUN yum install iputils
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Red Hat Universal Base Image 8 (RPMs) - BaseOS 2.5 MB/s | 774 kB 00:00
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.6 MB/s | 5.0 MB 00:00
Red Hat Universal Base Image 8 (RPMs) - CodeRea 75 kB/s | 13 kB 00:00
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
iputils x86_64 20180629-2.el8 ubi-8-baseos 149 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: Operation aborted.
error building at STEP "RUN yum install iputils": error while running runtime: exit status
Quando yum
installato iputils
, ha chiesto una conferma e ha fallito in quanto non ha mai ricevuto risposta. Ora diamo un'occhiata a cosa succede con --stdin
opzione in gioco.
# buildah bud -t mystdin --stdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
STEP 2: RUN yum install iputils
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Red Hat Universal Base Image 8 (RPMs) - BaseOS 2.8 MB/s | 774 kB 00:00
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.5 MB/s | 5.0 MB 00:00
Red Hat Universal Base Image 8 (RPMs) - CodeRea 86 kB/s | 13 kB 00:00
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
iputils x86_64 20180629-2.el8 ubi-8-baseos 149 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: y
Non si trova bene in un blog come di persona, ma il processo di compilazione si ferma alla linea Va bene [s/n]: e ho inserito il carattere y e la build è continuata (vedi sotto output).
Downloading Packages:
iputils-20180629-2.el8.x86_64.rpm 972 kB/s | 149 kB 00:00
--------------------------------------------------------------------------------
Total 952 kB/s | 149 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : iputils-20180629-2.el8.x86_64 1/1
Running scriptlet: iputils-20180629-2.el8.x86_64 1/1
Verifying : iputils-20180629-2.el8.x86_64 1/1
Installed products updated.
Installed:
iputils-20180629-2.el8.x86_64
Complete!
STEP 3: RUN touch /tmp/done
STEP 4: COMMIT mystdin
Getting image source signatures
Copying blob 92538e92de29 skipped: already exists
Copying blob eb7bf34352ca skipped: already exists
Copying blob f9ed641975cb done
Copying config b2742f08a7 done
Writing manifest to image destination
Storing signatures
--> b2742f08a7a
b2742f08a7ae2cb76a2cd0c481f2d2d66b303379d23e5260577ea09476a8a486
Questo è un altro esempio semplicistico, soprattutto perché potresti aggiungere un -y
argomento al yum
comando. Tuttavia, potrebbero esserci altri comandi che vorresti eseguire durante il processo di compilazione in cui vorresti ottenere facilmente un input più significativo.
Trova i tag per un'immagine contenitore
Questo prossimo strumento, relativamente nuovo per Podman, mostra tutti i tag per un'immagine contenitore su un registro. Uso le immagini su quay.io per Buildah, Podman e Skopeo, e a volte voglio usare una versione particolare di uno dei progetti e non riesco a ricordare quale sia là fuori. Se hai familiarità con Skopeo, funziona davvero bene in questo spazio. Ma se non hai installato Skopeo in locale, o non puoi per qualche motivo, allora il nuovo --list-tags
opzione per la podman search
il comando è il tuo biglietto.
Quindi diamo un'occhiata a tutti i tag che l'immagine stabile di Podman ha su quay.io:
# podman search --list-tags quay.io/podman/stable
NAME TAG
quay.io/podman/stable v1.4.4
quay.io/podman/stable v1.4.2
quay.io/podman/stable v1.5.1
quay.io/podman/stable v1.5.0
quay.io/podman/stable v1.6.2
quay.io/podman/stable auto
quay.io/podman/stable v1.6
quay.io/podman/stable v1.9.0
quay.io/podman/stable v1.9.1
quay.io/podman/stable v2.0.2
quay.io/podman/stable v2.0.6
quay.io/podman/stable v2.1.1
quay.io/podman/stable master
quay.io/podman/stable latest
Veloce, facile e maneggevole.
Utilizzo dell'immagine del contenitore Skopeo
Questo strumento è una specie di ying fino agli ultimi strumenti yang . Il progetto Skopeo è pieno di molti strumenti da utilizzare con le immagini dei contenitori. Inoltre, ti mostrerà l'elenco dei tag che un'immagine ha su un registro. Skopeo può anche visualizzare informazioni su un registro, consentire di copiare un'immagine contenitore tra meccanismi di archiviazione inclusi i registri, sincronizzare un registro contenitore, eliminare un'immagine da un registro e altro ancora.
Ora non mi immergerò in ciascuno di questi comandi Skopeo qui. Farò solo la capacità di ricerca per mostrare i tag. La svolta è che userò Podman solo per eseguire quay.io/skopeo/stable:latest
image, eliminando quindi la necessità di avere Skopeo installato ma avere ancora tutte le sue funzionalità disponibili.
Elenchiamo quindi i tag di quay.io/podman/stable:latest
immagine di nuovo, ma questa volta tramite l'immagine del contenitore Skopeo:
# podman run quay.io/skopeo/stable:latest list-tags docker://quay.io/podman/stable
Trying to pull quay.io/skopeo/stable:latest...
Getting image source signatures
Copying blob 6629904ed3b7 done
Copying blob 2b74ed94761c done
Copying blob 692512e477a1 done
Copying blob 166a3cbbffd1 done
Copying blob b1e90be38d32 done
Copying blob a5dc7d6cfd62 done
Copying blob a3ed95caeb02 done
Copying blob a3ed95caeb02 done
Writing manifest to image destination
Storing signatures
{
"Repository": "quay.io/podman/stable",
"Tags": [
"v1.4.4",
"v1.4.2",
"v1.5.1",
"v1.5.0",
"v1.6.2",
"auto",
"v1.6",
"v1.9.0",
"v1.9.1",
"v2.0.2",
"v2.0.6",
"v2.1.1",
"master",
"latest"
]
}
La prima volta che esegui questo comando, è più lento dell'equivalente di Podman poiché sostieni il costo di skopeo
immagine del contenitore in fase di estrazione. Dopodiché, la velocità è equivalente nelle corse secondarie, quindi puoi eseguire qualsiasi altro comando Skopeo che desideri.
Ti lascerò esplorare ulteriormente da solo e suggerirei di iniziare la tua esplorazione con Come eseguire Skopeo in un contenitore di Valentin Rothberg . Penso che l'immagine del contenitore Skopeo sia lo strumento più brillante nella mia casella degli strumenti del contenitore.
[ Iniziare con i container? Dai un'occhiata a questo corso gratuito. Distribuzione di applicazioni containerizzate:una panoramica tecnica. ]
Tutti i nuovi brillanti strumenti
Ora mia moglie può ancora avere tutti i suoi splendidi strumenti dal negozio di ferramenta locale e terrò i miei nuovi strumenti contenitore nella mia cassetta degli attrezzi virtuale. Spero che tu possa trovare utili questi nuovi comandi e opzioni nella tua cassetta degli attrezzi.