Wenn Sie das richtige Werkzeug benötigen, gibt es nichts Schöneres, als zu Ihrem örtlichen Baumarkt zu gehen und die Gänge zu Fuß zu gehen. Es ist großartig, den Gang mit Handwerkzeugen hinunterzugehen und sich all die Schraubendreher, Hämmer, Inbusschlüssel, Maßbänder und mehr anzusehen. Gerade wenn Sie denken, dass Sie das richtige Werkzeug entdeckt haben, kommt Ihnen ein Gedanke:Wenn ich das mit einem Handwerkzeug kann, kann ich es wirklich mit dem perfekten Elektrowerkzeug erledigen!
Das sagt mir zumindest meine Frau, und Sie sehen, sie ist die geschickte Person in unserer Familie. Meine bevorzugten Tools sind technische Tools. Geben Sie mir eine Reihe von Grafikkarten in einem Computergeschäft und ich bin ein glücklicher Camper.
Kürzlich habe ich beim Podman Community Meeting eine Demo gemacht, in der einige der glänzenderen neuen Container-Tools gezeigt wurden, die wir für Podman und Buildah entwickelt haben. Wir hatten viele große Ankündigungen mit Podman v3.0, daher dachte ich, dass einige dieser Tools möglicherweise überschattet wurden. Da ich einige nette Rückmeldungen von dieser Demonstration erhalten habe, dachte ich, dass ein Folgebeitrag ebenfalls hilfreich sein könnte. Lassen Sie uns also eintauchen und diese glänzenden neuen Container-Tools herausholen.
Ändern Sie das erste FROM in Ihrer Containerdatei
Es gibt einen neuen --from
Option im buildah bud
Befehl, der bald seinen Weg in Podman v3.0 finden wird. Mit dieser Option können Sie den Wert ersetzen, der dem ersten – und nur dem ersten – FROM zugeordnet ist Anweisung in der Containerdatei. Wenn wir zum Beispiel diese Containerdatei haben:
# cat ~/Containerfile.multifrom
FROM fedora as builder
FROM busybox
COPY --from=builder /bin/df /tmp/df_tester
Wir können einen ersten Lauf machen und es wird zeigen, dass wir fedora
verwendet haben Container-Image. Dann die busybox
image verwendet wird und schließlich die Dateien von fedora
kopiert werden 's /bin/df
Verzeichnis in die busybox
/tmp/df_tester
der Bilder Verzeichnis.
# 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
Stellen Sie sich nun eine realere Situation vor, eine Situation, in der Ihr VON ist -Anweisung verweist auf ein benutzerdefiniertes Bild mit einer Vielzahl von Tags für verschiedene Versionen des Bildes. Es wäre schön, insbesondere in einer CI-Umgebung, einfach das Container-Image zu übergeben, das Sie beim nächsten Lauf verwenden möchten, anstatt das gesamte Dockerfile neu zu erstellen. Das ist der Job, von dem --from
stammt füllt.
In diesem Beispiel führen wir denselben bud
aus Befehl, aber diesmal fügen wir --from alpine:latest
hinzu .
# 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
Sie können sehen, dass die alpine:latest
Container-Image wurde zuerst verwendet und jetzt nach der busybox
image erstellt wurde, die Dateien aus alpines /bin/df
wurden in den /tmp/df_tester
kopiert Verzeichnis auf busybox
. Der Wert des ersten FROM -Anweisung in der Containerdatei wurde durch das Argument ersetzt, das wir mit --from
übergeben haben Option.
[ Vielleicht möchten Sie auch lesen: Rootless-Container mit Podman ]
Eingaben während eines Builds akzeptieren
Ein weiteres neues Tool ist --stdin
Option, die mit buildah bud
einhergeht oder podman build
(ab Podman v3.0). Wenn Sie diese Option verwenden, wird der Build-Prozess angehalten und nach einer Tastatureingabe gefragt, wenn der während des Build-Vorgangs laufende Prozess danach fragt.
Sehen Sie sich diese Containerdatei an:
# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done
Diese Containerdatei verwendet den ubi8
image und installiert dann iputils
. Wie Sie wahrscheinlich erraten können, ist das yum
Der Befehl fordert uns auf, die Installation von iputils
zu überprüfen . Schauen wir uns an, was ohne --stdin
passiert Option im Spiel.
# 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
Wenn yum
iputils
installiert , es bat um eine Bestätigung und scheiterte, da es nie eine Antwort erhielt. Schauen wir uns nun an, was mit --stdin
passiert Option im Spiel.
# 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
Es kommt in einem Blog nicht so gut rüber wie persönlich, aber der Build-Prozess stoppt bei der Zeile Ist das ok [y/N]: und ich habe das Zeichen y eingegeben und der Build wurde fortgesetzt (siehe Ausgabe unten).
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
Dies ist ein weiteres vereinfachtes Beispiel, zumal Sie ein -y
hinzufügen könnten Argument für yum
Befehl. Dennoch gibt es möglicherweise andere Befehle, die Sie während des Build-Prozesses ausführen möchten, in die Sie auf einfache Weise wichtigere Eingaben erhalten möchten.
Suchen Sie die Tags für ein Container-Image
Dieses nächste Tool, das für Podman relativ neu ist, zeigt alle Tags für ein Container-Image in einer Registrierung an. Ich verwende Bilder auf quay.io für Buildah, Podman und Skopeo, und manchmal möchte ich eine bestimmte Version eines der Projekte verwenden und kann mich nicht erinnern, welche da draußen ist. Wenn Sie mit Skopeo vertraut sind, funktioniert es in diesem Bereich wirklich gut. Aber wenn Sie Skopeo nicht lokal installiert haben oder aus irgendeinem Grund nicht können, dann die neuen --list-tags
Option für die podman search
Befehl ist Ihr Ticket.
Schauen wir uns also alle Tags an, die das stabile Podman-Image auf quay.io hat:
# 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
Schnell, einfach und handlich.
Mit dem Skopeo-Container-Image
Dieses Tool ist eine Art Ying bis zu den letzten Werkzeugen yang . Das Skopeo-Projekt ist mit vielen Tools gefüllt, die mit Container-Images verwendet werden können. Es zeigt Ihnen auch die Liste der Tags, die ein Bild in einer Registrierung hat. Skopeo kann auch Informationen über eine Registrierung anzeigen, Ihnen ermöglichen, ein Container-Image zwischen Speichermechanismen einschließlich Registrierungen zu kopieren, eine Container-Registrierung zu synchronisieren, ein Image aus einer Registrierung zu löschen und vieles mehr.
Jetzt werde ich hier nicht auf jeden dieser Skopeo-Befehle eingehen. Ich werde nur die Suchfunktion nutzen, um die Tags anzuzeigen. Die Wendung ist, dass ich Podman nur verwenden werde, um quay.io/skopeo/stable:latest
auszuführen Image, sodass Skopeo nicht mehr installiert werden muss, aber dennoch alle Funktionen verfügbar sind.
Lassen Sie uns also die Tags von quay.io/podman/stable:latest
auflisten image erneut, aber diesmal über das Skopeo-Container-Image:
# 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"
]
}
Wenn Sie diesen Befehl zum ersten Mal ausführen, ist er langsamer als das Äquivalent von Podman, da Ihnen die Kosten für das skopeo
entstehen Container-Image wird gezogen. Danach ist die Geschwindigkeit bei sekundären Läufen gleich, und Sie können dann auch jeden anderen Skopeo-Befehl ausführen, den Sie möchten.
Ich lasse Sie auf eigene Faust weiterforschen, und ich würde vorschlagen, dass Sie Ihre Erkundung mit Valentin Rothbergs How to run Skopeo in a container beginnen . Ich denke, das Skopeo-Container-Image ist das glänzendste Tool in meiner Container-Toolbox.
[ Erste Schritte mit Containern? Schauen Sie sich diesen kostenlosen Kurs an. Containerisierte Anwendungen bereitstellen:Eine technische Übersicht. ]
All die glänzenden neuen Tools
Jetzt kann meine Frau immer noch alle ihre glänzenden Werkzeuge aus dem örtlichen Baumarkt haben, und ich werde meine neuen Containerwerkzeuge in meiner virtuellen Werkzeugkiste aufbewahren. Ich hoffe, dass Sie diese neuen Befehle und Optionen in Ihrer eigenen Toolbox nützlich finden.