2018-12-01 14:55

Die Container-Revolution frisst ihre Kinder

Container unter Unix/Linux gibt es schon sehr lange. Schon 1979 zog mit dem chroot System Call die Grundlage für den Bau isolierter Umgebungen in Unix System V ein.

Mit Linux-VServer begann schon in den 90er Jahren das erste vollwertige Containerprojekt für Linux, es wird heute noch gepflegt. Kurze Zeit später kamen Jails in BSD Unix. Seit Anfang der 2000er Jahre kann man bei Hosting-Providern V-Server auf Basis von Container-Technologie mieten. 2008 wurde LXC offizieller Bestandteil des Linux-Kernels. Dennoch führten Container lange Zeit außerhalb des Providerumfelds ein Nischendasein.

Die Programmiersprache Go wurde 2009 erstmals der Öffentlichkeit vorgestellt und erschien 2012 in der stabilen Version Go 1.0. Schon früh entschied sich die damals unbekannte amerikanische Firma dotCloud für Go und entwickelte damit mit Docker die Software, die die Container-Revolution einleitete. Die erste Version von Docker erschien 2013.

Go und Docker bildeten eine solide Basis für eine rasante Entwicklung. Schon 2014 kam das zunächst Google-eigene Projekt Kubernetes, ein leistungsfähiger Orchestrator für Anwendungen auf Basis von Docker unter Linux. Heute ist Kubernetes das größte öffentlich bekannte Projekt. das in Go geschrieben wird, und gehört neben Docker selbst zu den bekanntesten Entwicklungen in Go.

Daneben entstand im Projekt CoreOS, das heute zu Red Hat gehört, eine Reihe von Tools in Go. Das wohl bekannteste davon ist der verteilte Key-Value-Store etcd, der von Kubernetes zur Speicherung des Cluster-Zustands verwendet wird. Ein anderer bedeutender Player im Container-Umfeld ist Hashicorp, zu dessen Produkten Terraform, Consul, Vault und Nomad gehören.

Einst ein eigener Docker-Orchestrator, ist Rancher heute ein beliebtes Tool zum Management von Anwendungen in mehreren Kubernetes-Clustern. Helm ist der de-facto-Standard bei der Packetierung komplexerer Anwendungen für Kubernetes. Für das Monitoring von Performancedaten größerer Cloud-Infrastrukturen haben sich die Zeitreihendatenbanken Prometheus und InfluxDB etabliert, deren Daten mit Grafana visualisiert werden können.

Doch obwohl Docker (neben Go) die Basis all dieser Entwicklungen war, blieb es nicht alternativlos. Mit rkt erschien im CoreOS Projekt eine alternative Container-Engine, die stärker an den Bedürfnissen von Kubernetes orientiert ist und mehr Isolation von anderen Anwendungen erlaubt. Eine weitere Entwicklung in diese Richtung bildet CRI-O, das bei einigen Linux-Distributoren bereits als Ablösung für Docker ausgewählt wurde. Dass das nahtlos geht, liegt an der Standardisierung der Container-Definition durch die Open Container Initiative (OCI).

Mit Buildah, Podman und Skopeo ist nun abermals eine neue Runde bei der Container-Technologie eingeläutet worden. Dabei handelt es sich um CLI Tools, die die drei Kernfunktionen von Docker beherrschen: das Erstellen von Images (docker build), das Ausführen der Container (docker run) und das Handling von Container Registries (docker push/pull). Das Besondere an diesen Tools, die in Zusammenarbeit von Red Hat, SUSE und Google in Go entwickelt werden, ist, dass sie ohne System Daemon auskommen. Somit können auch nichtprivilegierte Benutzer alle Containerfunktionen nutzen, auch auf Multiuser-Systemen, ohne sich gegenseitig zu stören. Eine Unterstützung seitens Kubernetes ist bereits angekündigt.

Es sieht ganz danach aus, als ob Docker, noch das Synonym für Container unter Linux in großem Stil, in der nächsten Zeit nicht mehr zwingend benötigt wird. Seinen festen Platz in der IT-Geschichte hat Docker aber definitiv sicher.