GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fügen Sie diese 4 Tools zu Ihrer Linux-Container-Toolbox hinzu

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.


Linux
  1. Erstellen Sie Ihren eigenen Container unter Linux

  2. Fügen Sie Videos als Hintergrundbild auf Ihrem Linux-Desktop hinzu

  3. 7 unterhaltsame Funktionen für Linux-Container/Image-Transporte

  4. Was ist der Unterschied zwischen einem Linux-Container und einem Image?

  5. 20 einzeilige Linux-Befehle, die Sie Ihrer Toolbox hinzufügen können

Schützen Sie Ihre Online-Privatsphäre mit diesen Linux-Distributionen

Installieren Sie Nerd-Schriftarten, um Glyphen in Ihrem Code unter Linux hinzuzufügen

Linux-Tools:du vs. df

So fügen Sie ein Bildwasserzeichen in GIMP unter Linux hinzu

Erste Schritte mit Linux Mint? Konzentrieren Sie sich auf diese drei Werkzeuge

Linux für Unternehmen:Erweitern Sie Ihr Unternehmen mit diesen Anwendungen