Linux-Container-Leitfaden: Eine Einführung in Container

Container sind seit Jahren ein Schlagwort... aber was genau sind sie?

Container sind eine Methode zum Ausführen virtualisierter Anwendungen auf Ihrem Computer, ähnlich wie virtuelle Maschinen, verwenden jedoch andere zugrunde liegende Technologien. Es kann schwierig sein, sie zu verstehen, aber sie sind für die Ausführung aller Aufgaben unerlässlich Minecraft Server an Google. Und wir zeigen Ihnen, wie Sie sie einrichten.

Wir werden Linux verwenden, ein Betriebssystem, bei dessen Entwicklung der Schwerpunkt auf Portabilität, Modularität und Stabilität liegt. Linux ist überall zu finden, von Servern über Mikrowellen bis hin zu Videospielkonsolen. Container sind nicht auf die Ausführung unter Linux beschränkt, aber die Technologien dahinter sind am besten für Linux geeignet und laufen am besten unter Linux. Wenn Sie Linux-Neuling sind, empfehlen wir Ihnen, einen Blick auf unsere zu werfen Ratgeber für Anfänger vor dem Eintauchen.

Sind Container virtuelle Maschinen?

Container können ein komplexes Thema sein, aber es ist am besten, mit einem wichtigen Punkt zu beginnen: Ein Container ist es

nicht eine virtuelle Maschine. Eine virtuelle Maschine ist eine simulierte Version einer bestimmten Hardware und ihrer Software, die in einem sogenannten Hypervisor ausgeführt wird. Wenn Sie jemals Software wie VirtualBox oder verwendet haben Multipass, dann haben Sie einen Hypervisor verwendet.

Der Hypervisor läuft normalerweise entweder als eigenes Betriebssystem (bekannt als Typ-1-Hypervisor) oder innerhalb der Grenzen eines anderen Betriebssystems wie Windows oder Ubuntu (Typ-2-Hypervisor). Die Verantwortung des Hypervisors besteht darin, dem Gastbetriebssystem die simulierte Hardware bereitzustellen, die es zum Betrieb benötigt. Darauf kann dann das komplette Betriebssystem laufen. Dazu gehört alles von einer simulierten CPU und RAM bis hin zu Datenbussen, Festplatten oder Netzwerkadaptern. Diese Simulation ist rechenintensiv, sodass virtuelle Maschinen in der Regel einen erheblichen Overhead verursachen.

Was ist also ein Container?

Ein Container ähnelt einer virtuellen Maschine darin, dass er Software in einer isolierten Umgebung auf einem Hostsystem enthält und ausführt. Allerdings ersetzen Container die herkömmliche Hardware-Virtualisierung, indem sie direkt auf das Host-Betriebssystem zurückgreifen. Container nutzen die Bibliotheken und Binärdateien des Host-Betriebssystems gemeinsam und verfügen nur über die Ressourcen und Abhängigkeiten, die zum Ausführen der spezifischen Anwendung, die sie enthalten, erforderlich sind. Dies bedeutet, dass kein vollständiges Betriebssystem pro Container erforderlich ist, da alle Container auf einem ausgeführt werden Das System kann das einzelne Host-Betriebssystem gemeinsam nutzen und gleichzeitig die Trennung beibehalten, die Sie mit Virtual erhalten Maschinen.

Container greifen über eine Container-Engine auf das Host-Betriebssystem zu, die laufende Container verwaltet und ihren Zugriff auf das zugrunde liegende Betriebssystem steuert. Dazu kann die Durchsetzung der Sicherheit zwischen Containern und das Gewähren oder Verweigern des Zugriffs auf Betriebssystemdateien oder Netzwerkverbindungen gehören.

Welche Kompromisse gibt es bei der Verwendung von Containern?

Obwohl virtuelle Maschinen und Container ähnlich sind, hat die Verwendung von Containern auch Nachteile. Einerseits gelten virtuelle Maschinen als sicherer, da die Angriffsfläche zum „Entkommen“ aus der virtuellen Maschine deutlich kleiner und schwerer zu durchdringen ist. Ein Container eignet sich beispielsweise möglicherweise nicht zum Testen von Malware.

Der Hauptvorteil der Verwendung von Containern besteht darin, dass sie leichtgewichtig sind. Dadurch entfällt die Notwendigkeit, ein gesamtes Betriebssystem zu virtualisieren, was zu minimalen Startzeiten und einem geringeren System-Overhead führt. Dadurch können viel mehr Container auf einem Host laufen, was mit virtuellen Maschinen nicht möglich wäre.

Da für Container kein vollständiges Betriebssystem erforderlich ist, können sie problemlos in kleinere Images gepackt und verteilt werden. Während ein vollständiges Image einer virtuellen Maschine leicht mehrere zehn Gigabyte groß sein kann, können Container in Images von nur 15 KB vorliegen. Dadurch ist die Verteilung und Verwendung von Behältern äußerst einfach. Wir demonstrieren dies, indem wir einige einfache Beispielcontainer in Docker ausführen.

Docker installieren

Das ist viel Theorie, also lasst uns zur Praxis übergehen. Um Ihnen zu zeigen, wie Sie einen Container einrichten, installieren wir Docker in Ubuntu 23.10 und verwenden es, um einen einfachen Hello World-Container auszuführen. Unsere Schritte werden auf einer virtuellen Maschine getestet, Sie können aber auch von Ihrem Windows-PC aus dual booten oder eine verwenden Toller Laptop für Linux.

Docker hat sich schnell zum De-facto-Containerisierungstool entwickelt. Während es andere Tools gibt, ist Docker weit verbreitet und eignet sich perfekt für alle Anwendungen außer den anspruchsvollsten. Es gibt Dokumentation zu den verschiedenen Möglichkeiten zur Installation von Docker, aber wir werden das praktische Installationsskript verwenden. Dieser Befehl lädt ein Skript von get.docker.com auf Ihren lokalen Computer herunter:

$ curl -fsSL https://get.docker.com -o get-docker.sh

Anschließend können Sie dieses Skript ausführen, um Docker zu installieren. Sie können überprüfen, ob Docker korrekt installiert ist, indem Sie die Version überprüfen mit:

$ sudo sh ./get-docker.sh

Anschließend erfolgt eine Versionsprüfung mit:

$ sudo docker version

Sie können auch überprüfen, ob der Docker-Dienst im Hintergrund ausgeführt wird:

$ sudo systemctl status docker

Es sollte in grüner Schrift „aktiv (läuft)“ anzeigen, wie im Screenshot unten hervorgehoben. Auch die Version der Docker-Engine sollte fehlerfrei gedruckt werden.

Ausführen eines einfachen Beispiels

Nachdem Docker nun installiert ist, können Sie damit ein Container-Image herunterladen. Container-Images ähneln ISOs für virtuelle Maschinen, sind jedoch normalerweise kleiner und einfacher zu erstellen. Laden Sie ein einfaches Hello-World-Container-Image mit dem folgenden Befehl herunter:

$ sudo docker pull hello-world

Sobald das Bild heruntergeladen wurde, können Sie es überprüfen, indem Sie die auf Ihr System heruntergeladenen Bilder wie folgt auflisten:

$ sudo docker images

Nun sollte Hello-World heruntergeladen angezeigt werden. Beachten Sie die sehr geringe Größe (13 KB auf unserer Testmaschine) sowie das Tag. Das Tag eines Bildes ist praktisch seine Version. Standardmäßig lädt Docker die neueste Version eines Images herunter. Führen Sie einen Container basierend auf diesem Image aus, indem Sie Folgendes verwenden:

$ sudo docker run hello-world: latest

Dadurch wird das Hello-World-Spiel von Dockers ausgegeben, das von einem sehr kleinen C-Programm aus läuft (das Sie sich ansehen können). GitHub).

Glückwunsch; Sie haben Ihren ersten Container ausgeführt! In diesem Fall hat das Programm sein Ergebnis ausgegeben und seine Ausführung abgeschlossen. Der Container ist jetzt tot und läuft nicht mehr.

So halten Sie Container am Leben

Nachdem wir einen einfachen Container ausgeführt haben, können wir nun ein komplexeres Beispiel erstellen, das nicht sofort beendet wird, sobald eine Aufgabe abgeschlossen ist. Container werden oft um einen einzelnen Prozess herum aufgebaut, wodurch möglicherweise weitere Prozesse entstehen. Sobald dieser Basisprozess beendet wird, wird der gesamte Container damit beendet. Das hört sich vielleicht wie eine Einschränkung an, ist aber tatsächlich der Funktionsweise von Init-Systemen im vollständigen Linux-Kernel sehr ähnlich.

Um ein dauerhaftes Beispiel auszuführen, können wir ein Image für Nginx abrufen, einen Webserver, der zum Hosten eines erheblichen Prozentsatzes der Websites weltweit verwendet wird. Wir haben uns für Nginx für dieses Beispiel entschieden, weil es einfach ist, keine erweiterte Konfiguration erfordert und leichtgewichtig ist. Laden Sie das neueste Nginx-Image mit dem folgenden Befehl herunter:

$ sudo docker pull nginx

Wir haben das hinzugefügt -P Flag hier, um die Portweiterleitung vom Container zum Host-Betriebssystem zu konfigurieren. Port 80 wird für unverschlüsselten HTTP-Verkehr (also Web-Verkehr) verwendet. Dadurch können Sie von Ihrem Host-Computer aus auf den Container zugreifen:

$ sudo docker run -p 80:80 nginx

Dieser Befehl wird in Ihrem Terminal im angeschlossenen Modus ausgeführt, was bedeutet, dass der Container buchstäblich an Ihr Terminal angeschlossen ist, sodass alle Protokolle aus dem Container dort gedruckt werden. Sobald der Behälter hochgefahren ist, öffnen Sie ihn http://localhost in Ihrem Webbrowser. Sie sehen einen Nginx-Begrüßungsbildschirm ähnlich dem folgenden:

Der Nginx-Container läuft jetzt in Ihrer Container-Engine. Während Nginx im angehängten Modus ausgeführt wird, läuft es nur so lange weiter, wie es geöffnet ist. Sie können den Nginx-Container verlassen, indem Sie drücken Strg + C in Ihrem Terminal.

So führen Sie Container im Hintergrund aus

Um Nginx im Hintergrund auszuführen, fügen wir ein weiteres Flag hinzu: -D, für den getrennten Modus. Dadurch wird der Container getrennt von Ihrem Terminal gestartet, was bedeutet, dass er sich im Hintergrund befindet. Zum Beispiel:

$ sudo docker run -d -p 80:80 nginx

Sie können laufende Container auf einem System auflisten. Beachten Sie, dass Ihr Nginx-Container jetzt im Hintergrund läuft und ihm eine ID zugewiesen wurde.

$ sudo docker ps

Ein laufender Hintergrundcontainer kann anhand seiner ID beendet werden. Möglicherweise fällt Ihnen auch auf, dass dem Container ein Name gegeben wurde. Wenn keiner angegeben ist, gibt Docker jedem Container einen zufälligen, eindeutigen Namen.

$ sudo docker kill 

Sie können dies jedoch mit einigen interessanteren Bildern testen. Es gibt jede Menge davon im Docker-Hub, das als zentrales Repository für öffentliche Container-Images fungiert.

Mit Containern tiefer tauchen

Dies war eine kurze Einführung in Container. Container können unendlich komplex sein, aber sie sind ein Grundbaustein der hochverteilten Systeme, auf denen ein Großteil unseres modernen Internets läuft. Diese Macht schmälert jedoch nicht ihre Verwendung in kleinerem Maßstab. Vertrautheit mit den Grundlagen von Containern und Docker kann der Einstieg in die Ausführung nützlicher lokaler Dienste sein, z Minecraft Server oder Plex auf einem alten PC.