Container werden in der Cloud ausgeführt. Das liegt daran, dass die Containertechnologie es Websites und Web-Apps ermöglicht, bei steigender Nachfrage neue Kopien von sich selbst zu erstellen. Sie sind der Grund dafür, dass Hunderte Millionen Menschen beliebte Websites nutzen können, ohne dass diese Websites unter dem Druck des globalen Verkehrs einknicken. Container sind eine Linux-Technologie, was bedeutet, dass sie auf Code angewiesen sind (insbesondere cgroups
und Namespaces), die für den Linux-Kernel einzigartig sind, wenn Sie also einen Container ausführen, führen Sie Linux aus. Unter Verwendung von Container-Images von Websites wie quay.io und dockerhub.io erstellen die meisten Leute neue Container, die spezifisch für ihre Anwendung oder ihren Anwendungsfall sind. Aber das lässt einige Leute fragen:Wenn mein Container von einem Entwickler stammt, der auf dem Container eines anderen Entwicklers errichtet wurde, woher kommen dann die Container kommen aus? Keine Sorge, es sind nicht ganz unten Schildkröten. Sie können einen Container von Grund auf neu erstellen, und es gibt ein großartiges Open-Source-Tool namens Buildah, das Ihnen dabei hilft.
Linux-Container
- Was sind Linux-Container?
- Eine Einführung in die Containerterminologie
- Download:Einführung in Container
- Kubernetes-Operatoren:Automatisierung der Container-Orchestrierungsplattform
- eBook:Kubernetes-Muster zum Entwerfen cloudnativer Apps
- Was ist Kubernetes?
Behälterspezifikationen
Container sind aus Projekten wie Linux-Containern (LXC) und Docker hervorgegangen, und es ist die Open Container Initiative (OCI), die die formale Spezifikation dessen, was ein Container ist, verwaltet. Ein ordnungsgemäß zusammengestellter Container, der die OCI-Definition erfüllt, läuft auf jeder OCI-kompatiblen Container-Engine wie Podman, Docker, CRI-O usw.
Buildah installieren
Unter Fedora und CentOS ist Buildah möglicherweise bereits installiert. Wenn nicht, können Sie es mit Ihrem Paketmanager installieren:
$ sudo dnf install buildah
Auf Debian und Debian-basierten Systemen:
$ sudo apt install buildah
Buildah konfigurieren
Da Buildah Container erstellt, entspricht die Konfiguration Ihrer Umgebung dafür der Konfiguration für Podman. Unabhängig davon, ob Sie Podman verwenden oder nicht, konfigurieren Sie Ihr System für „rootless“ Podman, bevor Sie fortfahren.
Einen Container aus dem Nichts bauen
Um einen brandneuen Container zu bauen, der die vorherige Arbeit von niemandem als Grundlage verwendet, verwenden Sie den speziellen Namen scratch
um Buildah mitzuteilen, dass Sie einen leeren Container erstellen möchten. Der scratch
Bezeichnung ist kein Bildname. Es ist Ihre Befreiung davon, ein vorhandenes Bild als Grundlage für Ihre Arbeit zu verwenden.
$ buildah from scratch
Dieser neue Container namens working-container
enthält standardmäßig eine kleine Menge Metadaten und buchstäblich nichts anderes, und es läuft jetzt heimlich im Hintergrund. Sie können es mit den containers
sehen Unterbefehl:
$ buildah containers
CONTAINER ID BUILDER ID IMAGE NAME CONTAINER NAME
dafc77921c0c * scratch working-container
Um den Container auszuführen, müssen Sie zuerst den unshare
verwenden Unterbefehl (es sei denn, Sie führen Buildah als root aus):
$ buildah unshare
Bestätigen Sie, dass Ihr Arbeitscontainer keine Funktionalität hat (Fehler erwartete Antwort in diesem Fall):
$ buildah run working-container sh
ERRO[0000] container_linux.go:349: starting container process caused "exec: \"sh\": executable file not found in $PATH"
Hinzufügen zu Ihrem Container
Um Ihrem Container Befehle hinzuzufügen, müssen Sie ihn zuerst mounten. Container-Images werden in Ihrem ~/.local
gespeichert Verzeichnis standardmäßig:
$ buildah mount working-container
~/.local/share/containers/storage/overlay/b76940e6fe4efad7a0adca3b5399ee12055ddd733bbe273120dcae36a2e6c12f/merged
Wenn der Container in Ihrem ~/.local
gemountet ist Verzeichnis (oder /var/lib/containers/
im Falle der Ausführung als root), können Sie Pakete mit Ihrem Paketmanager hinzufügen. Der --releasever
muss mit der Distribution übereinstimmen, die Sie ausführen, während Sie den Container erstellen.
[Fedora]$ sudo dnf install --installroot \
~/.local/share/containers/storage/overlay/b76940e6fe4efad7a0adca3b5399ee12055ddd733bbe273120dcae36a2e6c12f/merged \
--releasever 33 \
bash coreutils \
--setopt install_weak_deps=false -y
Die genaue Methode zum Hinzufügen von Paketen hängt von Ihrer Distribution und dem verwendeten Paketmanager ab. Auf meinem Slackware-Desktop verwende ich beispielsweise installpkg
:
[Slack]$ installpkg --root ~/.local/share/containers/storage/overlay/b76940e6fe4efad7a0adca3b5399ee12055ddd733bbe273120dcae36a2e6c12f/merged \
/tmp/bash-5.0.17-x86_64-1_SMi.txz
Jetzt können Sie den Container ausführen und etwas Einfaches ausprobieren, z. B. eine Shell starten:
$ buildah run working-container bash
# bash --version
GNU bash, version 5.0.17(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Container konfigurieren
Die buildah config
Unterbefehl gibt Ihnen Zugriff auf allgemeine Attribute wie den Standardbefehl, den Ihr Container ausführen soll, wenn er gestartet wird, das Festlegen von Umgebungsvariablen, das Festlegen der Standard-Shell, das Definieren des Autors, der Architektur und des Hostnamens und vieles mehr. Stellen Sie sich zum Beispiel vor, dass Sie ein Paket hinzugefügt haben, das ein Shell-Skript mit dem Namen motd.sh
enthält , und Sie möchten, dass es ausgeführt wird, wenn der Container gestartet wird:
$ buildah config --author "Seth Kenlon" \
--os "Slackware" --shell /bin/bash \
--cmd /usr/bin/motd.sh working-container
Verteilen Sie Ihren Container
Wenn Sie mit dem Erstellen Ihres Containers fertig sind, können Sie ihn mit commit
als Bild beibehalten Unterbefehl.
$ buildah commit working-container my_image
Erstellen Sie es mit Buildah
Container wirken manchmal magisch, aber sie sind keine Magie. Sie werden von Grund auf neu erstellt und sind flexibel genug, dass andere, sobald ein Image existiert, es verwenden können, um neue Container und Container-Images zu erstellen, die eine andere Nische füllen. Es ist nicht notwendig, bei Null anzufangen, aber wenn Sie neugierig sind, wie Bilder beginnen, oder versuchen möchten, ein Bild speziell für Ihre Anforderungen zu erstellen, ist Buildah das geeignete Tool.