Docker-Einführung, Teil 3 Images und Container

Um die Popularität und Bedeutung von Docker zu verstehen, sollte man sich mit den Prinzipien von Linux-Containern auseinandersetzen. Dies erleichtert das Verständnis der Funktionsweise von Docker.

In Kürze wollen wir uns der Installation und Inbetriebnahme von Docker auf verschiedenen Plattformen sowie den verfügbaren Clients und wichtigsten Befehlen zuwenden. Doch vorher wollen wir zunächst noch einmal darauf eingehen, dass Linux-Container kein von Docker implementiertes Feature sind.

Linux Container gibt es wie im ersten Teil dieser Serie erläutert schon weitaus länger. Eine der ältesten Realisierungen von Linux Containern sind BSDs Jails (Gefängnisse). Auch hier ging es primär darum, einzelne Prozesse in „andere“ root.-Verzeichnisse zu verschieben. So wurde beispielsweise verhindert, dass bei einem gekaperten Apache-Webserver nicht das Betriebssystem kompromittiert wird, sondern lediglich ein relativer Ordner. Vorlage für die Idee ist das Unix-Kommando „change root“. Damit das zuverlässig funktioniert, müssen in solch einem relativen root-Folder selbstverständlich auch entsprechende Teilanwendungen und Abhängigkeiten bereitgestellt werden. Sie werden also sinngemäß mit in das Gefängnis eingesperrt.

Eine der ersten wirklich brauchbaren Implementierungen von Containern waren und sind Solaris-Zonen (Zones). Mit diesem Ansatz entschied sich der ehemalige Hersteller Sun (jetzt Oracle) seinerzeit bewusst gegen Virtualisierung auf Hardware-Ebene.

LXC und Docker

Im Gegensatz zu Docker lassen sich BSD Jails und Solaris Zones allerdings verhältnismäßig schwierig konfigurieren. Ferner mangelt es diesen Konzepten an Reproduzierbarkeit und entsprechenden Schnittstellen, wie LXC (Linux Containers) eine war und ist. Auch Docker nutzte bis zur Version 0.9 noch LXC als unabhängige Linux-Kernel-Schnittstelle, um die Kernel-Features von Linux-Container einzurichten.

Insofern war Docker ursprünglich eine Abstraktion über einer Schnittstelle zu speziellen Linux-Kernel-Features. Später hat Docker die Schnittstelle LXC durch eine eigene Implementierung namens „libcontainer“ ausgetauscht. Sie gilt heute als De-facto-Standard für diese Funktionalität, da sie auch von anderen Firmen wie Google oder Red Hat unterstützt wird.

Das libcontainer-Interface umfasst diverse Funktionalitäten, die von Docker wahrgenommen werden können. Docker selbst ist „nur“ ein Systemdienst, der auf höchster Ebene als root-Nutzer im Betriebssystem läuft und u. a über eine REST-API z. B. aus Webanwendungen heraus oder vom mitgelieferten Kommandozeile-Client bzw. bei Bedarf vom graphischen Client „Kitematic“ aus angesprochen wird.

Kitematic – eine GUI für Docker, die im Windows-Umfeld entstanden ist.

 

In der vorangestellten Abbildung erzeugen und starten wir einen neuen Busybox-Container auf einem Windows-10-basierten Container-Hosts im Kitematic-Client im interaktiven Modus, weshalb automatisch eine Powershell geöffnet wird. Klickt man auf „New“, landet man wieder in der Ansicht für Images und Repositories und kann weitere Container instanziieren bzw. besser „initialisieren“. Mehr zu Clients, Container-Hosts, Berechtigungen, Ports, Netzwerk und Storage sowie den Ausführungsmodi und vor allem zum automatisierten Bauen anhand von Dockerfiles in den kommenden Teilen.

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.