Docker statt virtuelle Maschinen
Container-Techniken sind in der IT schon eine Weile kein Hype-Thema mehr. Wir stellen sie vor, erläutern die Hintergründe und zeigen, wie ein erster Einstieg in die Container-Technik gelingen kann.
Profi-Container zum Testen
Dass neue Techniken und Ansätze in der IT zunächst einmal für Furore sorgen, ist eigentlich die Regel. Genauso schnell sind solche, oftmals als „die Lösung aller Probleme der IT“angepriesenen, Ansätze auch wieder entzaubert und zeigen, dass es sich bei ihnen eben auch nur um Technik mit all ihren Tücken und Problemen handelt. Die Technik der Containerisierung hat bereits Ende des Jahres 2014 für Aufsehen gesorgt und sich seitdem zu einer der Standardtechniken entwickelt, die ihren Platz in der professionellen IT gefunden haben. Als Synonym für den Begriff Container wird dann auch immer wieder der Name Docker genannt. Nun ist Docker zwar nicht die einzige Container-Technik, die den Nutzern zu Verfügung steht, aber sie stellt nach Meinung der Analysten zweifelsohne die populärste Ausprägung dieses Ansatzes dar.
Was sind eigentlich Container?
Solomon Hykes, Gründer der Firma Dotcloud, die später in Docker umbenannt wurde, und dessen CTO er bis vor kurzem war, gibt auf der Webseite des Unternehmens eine einfache Antwort: „Docker ist eine offene Plattform für (Software-)Entwickler und Systemadministratoren, mit deren Hilfe sie verteilte Anwendungen erstellen, ausliefern und laufen lassen können.“Damit deutet er auch schon an, dass Docker nicht einfach ein Softwarepaket oder Produkt ist, das „Off-the-Shelf“installiert wird. Es handelt sich vielmehr um eine Sammlung von Tools und APIs (Application Programming Interface – Programmierschnittstelle für Anwendungen). ContainerTechniken gab es schon vor dem Erscheinen von Docker, das zunächst auch auf die damals bereits zur Verfügung stehenden Linux-Container (LXC) aufsetzte. Heute besitzt Docker aber eine eigene ContainerEngine. Bei dieser „Engine“handelt es sich um eine der zwei Hauptkomponenten, der Docker Engine, bei der es sich um eine portierbare, „leichtgewichtige“Laufzeitumgebung handelt, und dem Hub. Dieser Hub ist ein Cloud-Dienst, der das Teilen von Anwendungen und das Automatisieren von Prozessen ermöglicht. Der Name Container wird einleuchtend, wenn man einmal auf die Vorteile blickt,
die der Logistik- und Transportbranche schon seit Jahrzehnten von den „richtigen“Transportcontainern geboten werden: Ganz gleich, welche Größe, Form oder andere Besonderheiten ein Produkt aufweist, es wird in einem standardisierten Container gepackt – und damit gekapselt. Alle anderen Unternehmen und Partner, die damit zu tun haben, können damit problemlos, effizient und relativ unabhängig vom Inhalt umgehen. Softwareentwickler und auch Administratoren stehen vielfach sowohl bei der Entwicklung als auch bei der Verteilung ihrer Anwendungen vor ganz ähnlichen Problemen wie die Industriebetriebe bei der Verteilung ihrer Waren vor der Zeit der Container: Wenn beispielsweise ein Unternehmen oder ein Softwareentwickler eine Anwendung erstellt, so benutzen sie dazu eine bestimmte Entwicklungsumgebung samt Programmiersprache, gegebenenfalls auch spezielle Laufzeit- und weitere Bibliotheken sowie ein abestimmtes, ausgewähltes Betriebssystem. Soll dieses Programm einem anderen Mitarbeiter zum Test zur Verfügung gestellt werden, so muss dieser die gleichen Rahmenbedingungen schaffen, damit er diese Anwendung überhaupt betreiben kann. Weiterhin erleichtert der Einsatz solcher Container auch die Arbeit der Administratoren, da sie so ihre Anwendungen schnell und zuverlässig auf fast jeder Infrastruktur nicht nur ausrollen sondern auch betreiben können. Das funktioniert besonders gut in Cloud-gestützten Umgebungen. Sie können auf diese Weise beispielsweise standardisierte Umgebungen für die Produktionsund Entwicklungsabteilungen bereitstellen. Probleme mit der darunterliegenden Infrastruktur sowie Inkonsistenzen zwischen den Entwicklungs-/Testumgebungen und den Systemumgebungen der Endanwender können so leichter ausgeschlossen werden. Weiterhin sind Administratoren bestrebt, so viele Aufgaben wie möglich zu automatisieren: Moderne IT-Verwaltung ohne Automatisierung ist heute undenkbar. Mit Hilfe der Container ist es möglich, Standardoperationen für das Starten, Stoppen oder auch Suchen von Anwendungen leichter zu automatisieren.
Unterschiede und Gemeinsamkeiten: Container und Virtualisierung
In Diskussionen zum Thema ContainerTechnologie und Docker kommen immer wieder die Ähnlichkeiten zur „normalen“Virtualisierung zur Sprache. Ihre Stärke zeigt die Technik hingegen erst dann, wenn man die Unterschiede zu den gängigen Virtualisierungs-Techniken näher betrachtet.
Grundsätzlich funktionieren Container auf ähnliche Art und Weise wie ein moderner Hypervisor: Anwendungen werden gekapselt und voneinander isoliert. SoftwareEntwickler scheuen allerdings häufig den hohen Aufwand, den das Erstellen und Anlegen einer kompletten virtuellen Maschine mit sich bringt: Schließlich müssen sie dazu zunächst einmal ein komplettes Betriebssystem in der virtuellen Maschine installieren, bevor sie sich den gewünschten Anwendungen und entsprechenden Bibliotheken zuwenden können, die ebenfalls installiert werden müssen. Da eine derartige Virtualisierung immer auf der Emulation einer virtuellen Hardware beruht, bedeutet das dann eben auch einen gewissen Overhead. Container basieren im Gegensatz dazu auf einem Betriebssystem, das sich mehrere Container teilen – einem shared operating system. Damit gehören Container im Vergleich zu den anderen Virtualisierungsansätzen zur Kategorie Betriebssystemvirtualisierung, während andere als Voll- oder Paravirtualisierung bezeichnet werden. Ihr Vorteil: Sie arbeiten „lightweight“, da sie einen viel kleineren Overhead aufweisen. So wird bei ihnen auch keine Hardware emuliert: Die Anwendungen laufen in ihren Containern alle auf einem Linux-System. Damit sind Container im Gegensatz zu virtuellen Maschinen auch nicht dazu in der Lage, beispielsweise unterschiedliche Betriebssysteme, etwa einen Windows Server 2016 und einen Red Hat Server auf einem Host-System, zu betreiben – schließlich verwenden alle Container das gleiche Betriebssystem. Im Idealfall können sie dabei auch die gleichen Laufzeitbibliotheken und weitere Ressourcen gemeinsam nutzen, was den Overhead ein weiteres Mal deutlich verringern kann.
Hand anlegen: Docker-Container auf Windows-10-System testen
Die vorherigen Beschreibungen zeigen wohl schon recht deutlich, dass der Einsatz von Container-Techniken auf dem Desktop in Konkurrenz zu Programmen wie VMware Workstation, Oracles Virtural Box oder auch Microsofts Hyper-V wenig sinnvoll erscheint. Wer aber einen ersten Einblick in die Grundlagen dieser Technik erhalten möchte, kann sich dazu eine Docker-Version für Windows aus dem Docker-Store unter der ULR: https://store.docker.com/editions/ community/docker-ce-desktop-windows herunterladen. Dabei handelt es sich dann um die so genannte Community Edition (CE) von Docker, die (und das ist ihr großer Vorteil) auf Windows 10 läuft. Dabei muss es
sich allerdings um WIndows 10 x64 in der Professional- oder Enterprise-Version handeln. Denn damit die eigentlich für Windows Server gemachten Container auch auf Windows 10 laufen, müssen einige Einstellungen vorgenommen werden, die wir im Kasten auf der vorherigen Seite beschrieben haben.
Community Edition für Windows 10 kommt mit MSI-Installer
Ein weiterer Vorteil der aktuellen Docker für Windows-Version CE (zum Zeitpunkt der Artikelerstellung war es die Version 18.06.1-ce-win73) besteht darin, dass sie mit einem MSI-Installer geliefert wird. Ein Download erfordert zunächst die Anmeldung im Docker-Store mit einer so genannten Docker-ID. Die können Nutzer aber auf der Seite unter Angabe einer E-Mail-Adresse schnell anlegen; sie benötigen diese später auf jeden Fall auch dazu, fertige ContainerImages aus dem Store herunterzuladen. Nach dem Download der etwas mehr als 500 MByte großen Datei starten die Anwender die Installation einfach mit einem Doppelklick. Das haben wir problemlos auf drei unterschiedlichen Windows-10-Systemen (zweimal Professional in unterschiedlichen Versionen und einmal Enterprise) durchführen können. Danach meldet sich Docker einmalig mit einer Startmeldung, die auch gleich eine Anmeldung an den DockerStore anbietet. Das ist durchaus sinnvoll, da die Software dann direkt auf die entsprechenden Container zugreifen kann. Im System-Tray finden Benutzer nach der erfolgreichen Installation ein kleines WalIcon. Ein Rechtsklick darauf, und die Einstellungen für die Docker-Software stehen zur Verfügung.
PowerShell oder Kommandozeile als Eingabe-Terminal
Die nächste Frage, die sich wohl jeder Einsteiger nun stellen wird: Wie komme ich nun an Docker? Hier zeigt sich dann gleich wieder die Linux-Vergangenheit der Software, denn es wird ein Terminalfenster benötigt. Unter Windows kann der Nutzer dazu die altbekannte Eingabeaufforderung oder die an ihre Stelle getretene PowerShell verwenden. Die erste Eingabe sollte dann so aussehen: docker version Damit wurde der Docker-Client geöffnet und meldet sich anschließend mit Versionsinformationen, wenn die Installation richtig abgelaufen ist. Dann wird es Zeit, ein erstes Image herunterzuladen. Auf der Webseite mit der Docker for Windows- Dokumentation unter https://docs.docker.com/docker-for-windows/ sind einige sehr gute Beispiele dazu einfach erklärt. So können Einsteiger zunächst mit einem einfachen Beispiel anfangen, welches nur das berühmte Hello World ausgibt. Nach Aufruf von: docker run hello-world versucht der Client zunächst lokal, den Container zu finden. Klappt das nicht, lädt er mit einem pull- Befehl die aktuelle Version ( latest) herunter und meldet sich mit Hello from Docker! Danach kann ein Nutzer beispielsweise auch komplette Windows Server Core-Container herunterladen. Docker für Windows kann mit Linux- und Windows-Containern arbeiten. Deshalb ist es in diesem Fall dann wichtig, dass der Docker-Client zunächst in den Einstellungen auf Windows-Container ( Switch to Windows-Container) umgestellt wird.