Wissen von A bis Z

Docker

Docker packt Ihre App in einen digitalen Umzugskarton, in dem alles exakt so angeordnet ist, dass es überall auf der Welt sofort funktioniert.

Docker ist eine Container-Plattform, die Linux-Container-Technologien (Namespaces, cgroups, OverlayFS) um eine entwicklerfreundliche Werkzeugkette aus CLI, Dockerfile-Syntax, Image-Format und Registry ergänzt. Im Kern besteht Docker aus dem Daemon "dockerd", dem CLI-Werkzeug "docker", dem Image-Format und der Registry-API. Container teilen sich den Linux-Kernel des Hosts, isolieren aber Prozesse, Dateisystem, Netzwerk und Benutzerräume, sodass mehrere Anwendungen mit unterschiedlichen Abhängigkeiten parallel auf demselben System laufen können.

Eingesetzt wird Docker für die Paketierung von Anwendungen samt aller Laufzeitabhängigkeiten in unveränderliche Images, die über Registries (Docker Hub, Azure Container Registry, GitHub Container Registry, Harbor) verteilt werden. Anwendungsfälle reichen vom lokalen Entwickler-Setup mit Docker Compose über CI/CD-Build-Stages und Reproduzierbarkeit von Test-Umgebungen bis hin zur produktiven Auslieferung an Container-Orchestratoren wie Kubernetes, Nomad oder Azure Container Apps.

Der Einsatzzweck und das gelöste Problem liegen in der historisch schwer beherrschbaren Diskrepanz zwischen Entwicklungs-, Test- und Produktionsumgebungen. Klassische "works on my machine"-Probleme entstehen durch unterschiedliche OS-Versionen, Bibliotheken, PATH-Variablen oder Service-Konfigurationen. Docker liefert ein deterministisches, layer-basiertes Image-Format und ein deklaratives Build-Manifest (Dockerfile), das einen reproduzierbaren Build-Prozess von Quellcode zu Image definiert. Damit entkoppelt es Anwendung von Hostsystem und schafft die Voraussetzung für "Build once, run anywhere".

Historisch entstand Docker 2013 als Open-Source-Projekt der Firma dotCloud (später in Docker Inc. umbenannt), mit Solomon Hykes als Gründer und prägendem Architekten. Die ersten Versionen nutzten LXC als Backend, ab 2014 entwickelte Docker mit "libcontainer" (später runC) eine eigene Implementierung. Daraus entstand 2015 die Open Container Initiative (OCI), die das Image-Format und die Runtime als Industriestandard spezifiziert. Mit Docker 1.12 wurde Swarm-Mode als integrierter Orchestrator eingeführt, mit Docker Desktop kamen Werkzeuge für Windows und macOS hinzu. Container-Runtimes für Kubernetes (containerd, CRI-O) sind direkte Abkömmlinge der ursprünglichen Docker-Implementierung.

Die initiale Lightning-Talk-Präsentation auf der PyCon US 2013 mit dem Titel "The future of Linux Containers" war auf fünf Minuten begrenzt, gilt aber als der Moment, in dem Containerisierung als Mainstream-Thema startete. Innerhalb weniger Jahre verschob sich die Branche so stark in Richtung Container, dass Docker-Image und Dockerfile zu Synonymen für "containerisierte Anwendung" wurden — selbst wenn unter der Haube heute oft andere Werkzeuge wie BuildKit, Buildah oder Kaniko die Builds durchführen.

Zurück