Dies ist der erste Beitrag zur Blogreihe über Kubernetes. Diese Blogreihe beschäftigt sich von den Grundkonzepten von Containern bis hin zu deren Einsatz. Anhand von Beispielen wird aufgezeigt, wie lokale containerisierte Testumgebungen aufgesetzt werden können.

In diesem Blogbeitrag möchte ich eine kurze Einführung in Container und die Container Software Docker geben. Das bedeutet:

  • Welche Unterschiede und Vorteile gibt es zwischen Containern und virtuellen Maschinen?
  • Wie unterscheidet sich deren Architektur?
  • Wie kann ich Container lokal laufen lassen?

Container vs. virtuelle Maschinen

Für das Entwickeln und Testen von Anwendungen sind Entwickler beispielsweise auf einen lokalen Webserver oder auch eine Datenbank angewiesen. Diese aufzusetzen kostet nicht nur Zeit, sondern auch Hardwareressourcen, egal ob auf dem Host Betriebssystem oder in einer virtuellen Maschine. Eine virtuelle Maschine hat neben ihrem eigenen Gast-Betriebssystem inklusive einem eigenen simulierten Kernel auch viele unnötige Abhängigkeiten.

Container

Container bieten im Vergleich zu virtuellen Maschinen eine ressourcensparende und leichtgewichtige Lösung, um Anwendungen dynamisch bereitzustellen. Zudem sind sie auch zustandslos und persistieren keine Daten, falls nicht gewollt. Ein Container bildet üblicherweise einen Prozess ab. Dieser ist durch Namespaces und Cgroups von parallel laufenden Prozessen auf dem Host-System isoliert. Jeder Container hat zudem sein eigenes Dateisystem mit seinen benötigten Bibliotheken, die die Lauffähigkeit des Prozesses sicherstellen. Eine containerisierte Anwendung kann dadurch mit ihren Abhängigkeiten (shared libraries) als Paket dynamisch auf unterschiedlichen Umgebungen (Cloud, Bare Metal) exportiert und bereitgestellt werden.

Architekturvergleich

In der nachfolgenden Abbildung ist die vereinfachte Architektur von Containern im Vergleich zu virtuellen Maschinen dargestellt. Die Abbildung hebt deutlich die Ressourcenaufteilung zwischen diesen hervor. Gleichzeitig könnten beispielsweise mehr Container als virtuelle Maschinen auf demselben Host-System betrieben werden.

Einführung in Container und Docker

Docker

Für die Verwaltung und Interaktion mit Containern wird eine Container Software benötigt. Diese Container Software baut aus einem Bauplan (Dockerfile) die eigentliche Anwendung und bietet (üblicherweise) über ein Kommandozeilen-Tool die Option mit dieser zu interagieren (starten & stoppen des Containers). Eine der populärsten Container Anwendungen ist Docker, wobei auch rkt oder Buildah mit Podman sich steigender Beliebtheit erfreuen.

Die Installation von Docker kann für Windows hier nachgelesen werden.

Das Starten eines Containers mit einer Datenbank ist in diesem Github-Repository erklärt.

Vom Bauplan zum Container

Ein Dockerfile ist der Bauplan für eine Anwendung, die als Container bereitgestellt werden soll. Der Container basiert auf einem Base-Image. Dieses kann beispielsweise ein minimales Betriebssystem wie Linux-Alpine oder Busybox sein. Auf Basis dieses minimalen Betriebssystems wird die eigentliche Anwendung (schichtweise) gebaut.

Copy to Clipboard

Aus diesem Dockerfile wird ein Container Image, welches in einer Container Registry gespeichert werden sollte. Dafür bietet sich zum Beispiel dockerhub an. Die unten stehende Abbildung zeigt visuell den Ablauf dar, wie aus einem Dockerfile ein Container entsteht.

Docker to Container

Aus dem Dockerfile kann nun mit dem Befehl

Copy to Clipboard

ein Container Image gebaut werden.

Mit dem Befehl

Copy to Clipboard

kann aus dem Docker Image ein Container gestartet werden. Dieser Container ist eine PostgreSQL Instanz.

Docker-CLI

Docker bietet ein Kommandozeilen-Tool (docker) um die Container über ein Terminal zu verwalten. Hier sind die gängigsten Befehle aufgelistet:

  • Alle laufenden Container auflisten
Copy to Clipboard
  • Einen Container starten
Copy to Clipboard
  • Einen Container stoppen
Copy to Clipboard
  • Einen Container löschen
Copy to Clipboard
  • Alle bereits heruntergeladenen Images auflisten
Copy to Clipboard
  • Terminal in einem Container öffnen
Copy to Clipboard
  • Vorsicht! Ungenutzte Images, Container und Netzwerke löschen (–volumes zusätzlich für Volumes)
Copy to Clipboard
  • Auf einer privaten Container Registry einloggen
Copy to Clipboard

Nächster Blogbeitrag

Im nächsten Blogbeitrag wird das Open Source Container Orchestrierungstool Kubernetes erklärt. Dieses bietet die Möglichkeit große Containerlandschaften automatisiert zu verwalten. Google verwaltet damit täglich Milliarden von Containern.

Blog Yannic Nevado

Yannic Nevado

Yannic Nevado war Datenbank-Consultant bei der Proventa AG. Seine Schwerpunkte lagen beim Open Source und EDB Postgres. Er arbeitete mit Kunden daran neue Datenbanksysteme einzuführen. Des Weiteren unterstützte er Migrationen von Oracle und DB2 zu Postgres. DevOps mit Containern und Kubernetes gehörten außerdem zu seinem Alltag.