Was ist Container?

Ausführungseinheit, die eine Anwendung mit den Bibliotheken und Einstellungen bündelt, die sie benötigt, und sie isoliert von anderen Prozessen ausführt, während sie sich den Kernel des Host-Betriebssystems teilt. Unter Linux wird sie aus Namespaces, die die Sicht auf Prozess-IDs, Netzwerk, Mounts usw. trennen, und cgroups, die den Verbrauch von CPU und Arbeitsspeicher begrenzen, aufgebaut. Ein Container ist leichter und startet schneller als eine virtuelle Maschine, die ein ganzes Betriebssystem bootet; da er sich den Kernel teilt, kann er aber keinen Kernel einer anderen Betriebssystemart als der des Hosts ausführen. Container werden aus Container-Images erzeugt und mit Werkzeugen wie Docker und Kubernetes erstellt und verwaltet.

Japanische Bezeichnung: コンテナ

„Container“ kommt in 19 Übungsfragen aus 2 Themen vor, z. B. Grundlagen von Cloud und Containern, Betriebssystem und Hardware.

Fachgebiet: Grundlagen von Cloud und Containern

Unterschied zur virtuellen Maschine

Virtuelle Maschinen betreiben auf einem Hypervisor jeweils ein Betriebssystem mit eigenem Kernel. Ein Container bootet kein Betriebssystem, sondern läuft als isolierter Prozess auf dem Kernel des Hosts; er startet daher oft in weniger als einer Sekunde, und viele Container lassen sich auf einer Maschine unterbringen. Dafür beruht seine Isolation auf Kernelfunktionen und ist nicht so stark wie die einer virtuellen Maschine. Wo starke Isolation nötig ist, werden Container auch in leichtgewichtigen virtuellen Maschinen ausgeführt.

Das Dateisystem eines Containers

Das Dateisystem eines Containers besteht aus einer beschreibbaren Schicht für diesen Container über den schreibgeschützten Image-Schichten. Wird eine Datei aus dem Image geändert, wird sie zuerst in die beschreibbare Schicht kopiert und dann geändert (Copy-on-Write). Die beschreibbare Schicht verschwindet, wenn der Container entfernt wird; Daten, die erhalten bleiben sollen, werden daher in externem Speicher wie einem Volume abgelegt.

Entwurf für Wegwerfbarkeit

Container werden unter der Annahme entworfen, dass ein defekter Container nicht repariert, sondern aus dem Image neu erzeugt und ersetzt wird. Die Konfiguration kommt von außen, etwa über Umgebungsvariablen, Logs werden auf die Standardausgabe geschrieben, damit die Plattform sie sammelt, und Zustand liegt in Datenbanken oder Speicherdiensten. So lässt sich die Zahl der Container leicht ändern oder eine neue Version einwechseln.

Jetzt üben: Fragen zu Container

Welche Aussage zum Unterschied zwischen Containern und virtuellen Maschinen ist richtig?

  1. AContainer haben jeweils einen eigenen Betriebssystemkern, virtuelle Maschinen teilen sich den Kern
  2. BContainer laufen auf einem Hypervisor, virtuelle Maschinen allein mit Betriebssystemfunktionen
  3. CContainer teilen sich den Kern, virtuelle Maschinen betreiben jeweils ein eigenes Betriebssystem
Antwort und Erläuterung anzeigen

Antwort: C. Container teilen sich den Kern, virtuelle Maschinen betreiben jeweils ein eigenes Betriebssystem

Container sind ein Verfahren, das sich den Kern eines Betriebssystems teilt und dabei Dateisicht, Prozesse, Netzwerk und nutzbare Ressourcen gruppenweise isoliert. Da kein ganzes Betriebssystem gestartet wird, sind sie leicht und starten schnell. Virtuelle Maschinen betreiben auf einem Hypervisor jeweils ein Betriebssystem mit eigenem Kern; sie sind schwerer, dafür stärker isoliert und können auch andere Betriebssystemarten ausführen. Den Kern teilen die Container; bei Antworten ist auf umgekehrte Beschreibungen zu achten.

Welche Kombination ordnet den Linux-Kernelfunktionen, auf denen Container beruhen, nämlich den Namespaces und den cgroups (Control Groups), ihre Aufgaben richtig zu?

  1. ANamespaces: trennen, was ein Prozess sieht (Prozess-IDs, Netzwerk, Mounts usw.); cgroups: begrenzen und erfassen den Verbrauch von Ressourcen wie CPU und Arbeitsspeicher
  2. BNamespaces: begrenzen und erfassen den Verbrauch von Ressourcen wie CPU und Arbeitsspeicher; cgroups: trennen, was ein Prozess sieht (Prozess-IDs, Netzwerk, Mounts usw.)
  3. CNamespaces: starten für jeden Container einen eigenen Kernel, um die Container voneinander zu isolieren; cgroups: erzeugen für jeden Container eine virtuelle CPU und emulieren die Hardware
Antwort und Erläuterung anzeigen

Antwort: A. Namespaces: trennen, was ein Prozess sieht (Prozess-IDs, Netzwerk, Mounts usw.); cgroups: begrenzen und erfassen den Verbrauch von Ressourcen wie CPU und Arbeitsspeicher

Ein Container ist ein gewöhnlicher Prozess, der auf dem Kernel des Hosts läuft und durch zwei Mechanismen isoliert wird. Namespaces teilen Prozess-IDs, Netzwerk, Mounts (die Sicht auf das Dateisystem), Hostnamen usw. in Gruppen auf, sodass die Prozesse in einem Container nur ihren eigenen Teil sehen. cgroups begrenzen die CPU-Zeit und die Speichermenge, die eine Gruppe von Prozessen nutzen kann, und erfassen den Verbrauch. Beides sind Kernelfunktionen; ein Container startet also weder einen eigenen Kernel, noch emuliert er Hardware.

Häufige Fragen

Kann ein Container eine andere Linux-Distribution als der Host verwenden?

Ja. Ein Image enthält Dateien des Userspace wie Befehle und Bibliotheken, und diese können aus einer anderen Distribution stammen. Den Kernel teilt sich der Container jedoch mit dem Host; uname -r zeigt daher den Kernel des Hosts, und Funktionen, die dem Kernel des Hosts fehlen, stehen nicht zur Verfügung.

Warum können Linux-Container unter Windows oder macOS laufen?

Werkzeuge wie Docker Desktop betreiben eine kleine virtuelle Linux-Maschine und führen die Linux-Container darin aus. Linux-Container brauchen immer irgendwo einen Linux-Kernel.

„Container“ in den Erläuterungen

Fragen mit „Container“ (19)

  1. Welche Aussage zum Unterschied zwischen Containern und virtuellen Maschinen ist richtig?
  2. Welche Kombination ordnet den Linux-Kernelfunktionen, auf denen Container beruhen, nämlich den Namespaces und den cgroups (Control Groups), ihre Aufgaben richtig zu?
  3. Auf einem Linux-Host wird mit Docker ein Container aus einem Image gestartet, das auf einer anderen Distribution als der des Hosts beruht, und darin werden uname -r (zeigt das Release des Kernels) und cat /etc/os-release (zeigt Angaben zur Distribution) ausgeführt. Welche Beschreibung der Ergebnisse ist richtig?
  4. Welche Beschreibung des Verhältnisses zwischen einem Container-Image und einem Container ist richtig?
  5. In einem Container, der aus einem Image gestartet wurde, wird die im Image enthaltene Konfigurationsdatei /etc/app.conf geändert. Was geschieht beim üblichen Speichermechanismus von Docker (etwa overlay2)?
  6. Welche Kombination gibt für das obige Dockerfile richtig an, welcher Befehl beim Bauen des Images mit docker build und welcher beim Starten eines Containers mit docker run ausgeführt wird?
  7. Das aus dem obigen Dockerfile gebaute Image pinger wird mit docker run pinger example.com gestartet. Welcher Befehl wird im Container ausgeführt?
  8. Aus dem Image nginx, einem Webserver, der auf Port 80 lauscht, wird mit dem obigen Befehl ein Container gestartet. Die IP-Adresse des Hosts sei 192.0.2.10, und es gebe keine Einschränkungen etwa durch eine Firewall. Mit welcher URL erreicht man diesen Webserver vom Browser eines anderen PCs im selben Netzwerk?
  9. Welche Beschreibung von benannten Volumes und Bind-Mounts, mit denen in Docker die von einem Container geschriebenen Daten erhalten bleiben, ist richtig?
  10. Wie heißt in Kubernetes die kleinste Einheit, die bereitgestellt und verwaltet wird und einen oder mehrere Container zusammenfasst, die sich dieselbe IP-Adresse und dieselben Volumes teilen?
  11. Eine Webanwendung kann nach dem Start etwa 60 Sekunden lang, während sie ihren Cache lädt, keine Anfragen bearbeiten und liefert in dieser Zeit für /ready den Status 503. Welche Wirkung hat es, die obigen Einstellungen zum Container des Pods hinzuzufügen?
  12. In einem Deployment, dessen Pod-Container die obigen Einstellungen haben, laufen vier Pods, von denen jeder 400m (0,4 Kerne) CPU nutzt. Die Ziel-CPU-Auslastung des HorizontalPodAutoscalers ist 60 %, und die benötigte Zahl der Pods wird als ⌈aktuelle Zahl × aktuelle Auslastung ÷ Zielauslastung⌉ berechnet. Wie viele Pods werden benötigt?
  13. Welche Beschreibung der für einen Container gesetzten Ressourcen-Requests und -Limits in Kubernetes ist richtig?
  14. Ein Node hat zuteilbare Ressourcen von 4 CPU-Kernen und 8 GiB Arbeitsspeicher. Der Container jedes Pods hat als Requests 500m CPU und 1,5 GiB Arbeitsspeicher und als Limits 1 CPU-Kern und 2 GiB Arbeitsspeicher. Es gibt keine anderen Pods und keine Systemreservierungen. Wie viele Pods können höchstens auf diesem Node platziert werden?
  15. Wie oben gezeigt, wird das Verbindungsziel der Datenbank nicht in das Image geschrieben, sondern beim Start des Containers als Umgebungsvariable übergeben. Was ist der wichtigste Vorteil dieses Entwurfs?

Verwandte Begriffe

Pod Docker Kubernetes Umgebungsvariable Hypervisor CPU-Zeit Container-Image Copy-on-Write JSON (JavaScript Object Notation) Argument

Zur Glossarübersicht