Docker und Windows Server 2016 – Das müssen Profis wissen

Eine der Neuerungen, die Microsoft für Windows Server 2016 am meisten herausstellt, sind die Windows Server Container. Diese basieren auf der Plattform Docker. Microsoft arbeitet eng mit den Docker-Entwicklern zusammen, um deren Lösung als Windows Server Container und Hyper-V-Container in Windows Server 2016 zu integrieren.

Microsoft stellt Windows Server Container und Hyper-V-Container im Rahmen des Open-Source-Projektes Docker zur Verfügung. Die Einbindung erfolgt in Windows Server 2016, die Verwaltung können Administratoren mit dem Docker-Client vornehmen oder in der PowerShell steuern. Die Technik wird auch in System Center 2016 integriert, sodass Unternehmen, die Container mit Windows Server 2016 betreiben, diese mit System-Center-2016-Produkten verwalten können.

Betriebssystem-Virtualisierung mit Docker

Die Virtualisierung von Servern auf Basis herkömmliche Technologien beinhaltet einige Nachteile. Der größte besteht darin, dass die Betriebssysteme auf den virtuellen Servern eine Last verursachen, die generell nichts mit der virtualisierten Anwendung selbst zu tun hat. Jeder virtuelle Server erhält eine eigene Kopie eines Betriebssystems, die er verwalten muss. Außerdem lassen sich diese Betriebssysteme angreifen, was die Sicherheit der virtuellen Serveranwendungen beeinträchtigt.

Windows Server 2016: Docker mit Windows (Bild: ZDNet.de)Jeder virtuelle Server nutzt also eine Kopie des Betriebssystems, das vollständig installiert, verwaltet und aktualisiert sein muss. Erstellen Administratoren einen neuen virtuellen Server, muss auch dieser erst das Betriebssystem mit allen Ressourcen als Kopie erhalten, starten und verwalten. Selbst wenn auf einem Host bereits virtuelle Server gestartet sind, muss der neue virtuelle Server alle Treiber, Betriebssystemdateien, Bibliotheken und Einstellungen erneut erhalten. Das belastet den Server und die virtuellen Server.

Diesem Problem hat sich Docker angenommen. Die Technologie ermöglicht, einfach ausgedrückt, die Virtualisierung von Server- und Cloud-Anwendungen, ohne auf unnötige Betriebssystemteile zu setzen. Das Betriebssystem und die notwendigen Ressourcen sind auf dem Container-Host bereits geladen, im Grunde genommen, wie auf einem Virtualisierungs-Host. Das Betriebssystem und alle notwendigen Ressourcen werden den Containern zur Verfügung gestellt. Startet ein Container, muss er also nicht ein Betriebssystem booten, Bibliotheken laden und Arbeitsspeicher für das Betriebssystem zur Verfügung stellen, sondern kann sofort die notwendigen Teile des Betriebssystems auf dem Container-Host nutzen. Verwaltet wird der Vorgang durch den Container-Host. Dadurch lassen sich auf einem Host natürlich ein Mehrfaches an Instanzen betreiben als bei der Verwendung von virtuellen Servern.

Container sind also eine andere Art der Virtualisierung, die auch als Betriebssystem-Virtualisierung bezeichnet wird. Container sind ein vollständig isoliertes und unabhängiges Betriebssystem, speziell auf die Anwendung im Container gebunden. Der gestartete Container sieht die lokale Festplatte wie eine unberührte Kopie der OS-Dateien. Außerdem denkt der Container, Speicher, Dateien und Daten basieren auf einem frisch gebooteten Betriebssystem. Damit das funktioniert, muss das Host-Betriebssystem über entsprechende Funktionen verfügen. In der Vergangenheit unterstützte das nur Linux, ab Windows Server 2016 bietet auch Microsoft die Technologie in Zusammenarbeit mit Docker an.

Dadurch werden die virtuellen Anwendungen sehr viel kleiner als herkömmliche virtuelle Server, benötigen weniger Ressourcen, und sind gleichzeitig sicherer, da Angriffspunkte fehlen. Weitere Vorteile sind der Betrieb von mehr virtuellen Anwendungen pro Virtualisierungs-Host, da diese weniger Serverlast verursachen und eine wesentlich schnellere Bereitstellung bieten.

Vor allem bei Cloudanwendungen, die mehrere Knoten benötigen, wie Cluster für Big Data-Berechnungen, können von solchen Container-Technologien profitieren. Damit eine Anwendung auf diesem Weg virtualisiert werden kann, muss sie die Docker-Technik unterstützen, aber auch das Betriebssystem, das im Container in einer sehr komprimierten und eingeschränkten Form zur Verfügung gestellt wird. Denn eigentlich sind auch die Container virtuelle Server, nur eben sehr viel kleiner, und komplizierter aufgebaut. Container sind, wie virtuelle Server auch, über das Netzwerk erreichbar und erhalten eine IP-Adresse. Aktuelle Versionen unterstützen dabei auch bereits IPv6.

Alle Windows-Versionen, bis hin zu Windows Server 2012 R2, unterstützen diese Technologie nicht. Erst mit Windows Server 2016 geht Microsoft auch hier den Weg Serveranwendungen sicherer und cloudkompatibler zu machen.

Docker und Linux

Die Container-Technologie Docker und Linux beherrschen die Technik seit längerem. Docker stellt virtuelle Anwendungen als Image bereit. Auf Basis eines Images werden Container erstellt, die dann schließlich die Serveranwendung hosten.

Prominentes Beispiel dafür ist die Bereitstellung eines Hadoop-Clusters über Docker-Container. Aber auch Datenbank-Server lassen sich in Docker-Container betreiben, und zwar rationale Datenbanken und NoSQL-Datenbanken. Webserver sind ebenfalls ein typisches Einsatzgebiet der Docker-Technik. Hier ist Linux seit Jahren ein Vorreiter.

Docker und Microsoft Windows

Microsoft hat in den letzten Jahren erkannt, dass die Container-Technologie immer wichtiger wird. Daher arbeiten die Entwickler bei Microsoft eng mit den Docker-Entwicklern zusammen. Bei der Docker-Einbindung in Windows Server 2016 handelt es sich also nicht um eine parallel entwickelte Technologie, sondern die Docker-Entwickler nutzen in Windows Server 2016 die gleiche Codebasis wie in Linux und erhalten Zugriff auf den notwendigen Windows-Code.

Die Docker-Implentierung „Windows Server Container“ lässt sich bereits jetzt mit Windows Server 2016 TP5 testen sowie in Microsoft Azure als eigener virtueller Server.

Bei der Container-Technologie in Windows Server 2016 handelt es sich auch um keine spezielle Edition des neuen Servers. Unternehmen erhalten mit jeder Windows Server 2016-Edition auch Zugriff auf die Container-Technologie. Dabei haben Administratoren die Möglichkeit die Container auf vollständig installierten Servern zu betreiben oder auch auf Core-Servern. Spätestens die endgültige Version von Windows Server 2016 wird auch auf Nano-Servern, der noch kleineren Serverversion von Windows Server 2016, Container unterstützen.

Wird das Windows Server Container Preview-Image in Microsoft Azure genutzt, handelt es sich übrigens um einen normalen Core-Server auf Basis von Windows Server 2016 TP5 mit aktivierter Container-Technologie. Auf herkömmlichen Servern wird diese über den Server-Manager aktiviert. Verwalten lassen sich Container in Windows Server 2016 über die PowerShell, oder die Befehlszeile mit dem Befehl docker. Dazu wurde der Docker-Client direkt in das Betriebssystem integriert.

Verwaltet werden die Container in Windows Server 2016 über die PowerShell (Screenshot: Thomas Joos).Verwaltet werden die Container in Windows Server 2016 über die PowerShell (Screenshot: Thomas Joos).

Welche Umgebung Administratoren zur Verwaltung verwenden, ist Geschmacksache. Microsoft empfiehlt dafür natürlich die PowerShell. Mit dem Docker-Client in Windows Server 2016, den Administratoren übrigens auch auf anderen Rechnern installieren können, lassen sich nicht nur die Windows Server Container in Windows Server 2016 verwalten, sondern auch Docker-Container auf Linux-Servern.

Docker-Container lassen sich in Windows Server 2016 auch mit dem Befehl docker verwalten (Screenshot: Thomas Joos).Docker-Container lassen sich in Windows Server 2016 auch mit dem Befehl docker verwalten (Screenshot: Thomas Joos).

Zukünftig sollen sich auf Container-Hosts mit Windows Server 2016 nicht nur andere Windows-Server als Container betreiben lassen, sondern auch Linux-Images. Dazu nutzt Windows Server 2016 mit Docker aber keine Virtualisierung, sondern verwendet eine Sandbox-Umgebung, genauso wie Docker in Linux. Derzeit ist das noch nicht möglich. Wie sich das in Zukunft verhält, ist ebenfalls unklar. In jedem Fall wird es aber möglich sein, mit dem Docker-Client in Windows Server 2016 auch Linux-Container über das Netzwerk zu verwalten.

Docker im Detail verstehen – Namespaces und cgroups

Docker nutzt auf Linux-Servern sehr stark den Linux-Kernel, zum Beispiel die Features „namespaces“ und „cgroups“. Die Technik wird dementsprechend auch in Windows Server 2016 übernommen.

Namespaces haben die Aufgabe alle Ressourcen, die in einem Container von Anwendungen genutzt werden, zu verwalten. Das sind zum Beispiel Dateien, Prozesse oder Ports in Netzwerken. Das Host-System weist jedem Container eine eigene Kopie dieser Ressourcen zu, die nur der entsprechende Container nutzen kann. Der Container kann per Definition auf keinerlei Ressourcen zugreifen, die sich außerhalb seines Namespace befinden.

Docker kann Ressourcen, die von vielen Containern gemeinsam genutzt werden, zum Beispiel Teile des Betriebssystems, auch zwischen den Containern freigeben und gemeinsam nutzen. Das verbessert die Leistung, ohne die Sicherheit zu stark zu beeinträchtigen. Ändert ein Container etwas an einer der freigegebenen Ressourcen, zum Beispiel einer Datei im Betriebssystem, dann wird dieser Teil dem Container separat zur Verfügung gestellt, und zwar nur der geänderte Teil, nicht die ganze Datei. Diese Technik macht den Betrieb zahlreicher Container sehr effizient, da nur notwendige Teile des Betriebssystems als Kopie zur Verfügung gestellt werden, während viele Teile des Betriebssystems gemeinsam genutzt werden können. Bei virtuellen Servern erhält jeder Server eine vollständige Kopie des Betriebssystems.

Damit Docker auf Windows läuft, musste Microsoft Erweiterungen in den Windows-Kernel einbauen. Diese ermöglichen es, dass Docker in einer Sandbox Prozesse starten kann, also die Container. Docker nutzt dazu den Treiber „execdriver“. Für Windows wurde dieser Treiber neu entwickelt. Er erlaubt die Verwendung des Host Compute Service in Windows Server 2016 um Container zu erstellen. Die dazu notwendigen Erweiterungen hat Microsoft als Open Source zur Verfügung gestellt.

Windows Server Container unterstützen zahlreiche Programmiersprachen. Entwickler können zum Beispiel .NET, ASP.NET, PowerShell, Python, Ruby on Rails, Java und viele andere Umgebungen nutzen, um Container zu erstellen, zu verwalten oder Anwendungen zu schreiben, die auf Basis von Windows Server Containern funktionieren.

Der Container-Host kann jederzeit umfänglich steuern, welche und wie viele Ressourcen des Hosts ein einzelner Container nutzen darf, ohne die anderen Container oder den Host zu beeinträchtigen. Darf ein Container zum Beispiel nur maximal 10% CPU-Last verursachen, dann bleiben die anderen 90% CPU-Last für diesen Container gesperrt, auch wenn die Anwendungen im Container mehr CPU-Last verursachen wollen. Diese Technik wird wiederum von der Linux-Technologie „cgroups“ gesteuert.

Docker auf Linux-Basis in Microsoft Azure

Neben der Windows-Einbindung von Docker, stellt Microsoft aber auch virtuelle Linux-Server in Microsoft Azure zur Verfügung. Diese bieten die originale Docker-Einbindung auf Basis von Linux. Natürlich lassen sich die Container in Linux und Windows Server 2016 auf Basis von Docker parallel nutzen.

Docker lässt sich in Microsoft Azure auch als virtueller Linux-Server nutzen und mit Windows Server Containern verbinden (Screenshot: Thomas Joos).Docker lässt sich in Microsoft Azure auch als virtueller Linux-Server nutzen und mit Windows Server Containern verbinden (Screenshot: Thomas Joos)

Microsoft bietet auch Erweiterungen für virtuelle Server in Microsoft Azure an, welche die Docker-Technologie besser unterstützen. Außerdem können Administratoren mit der Azure CLI Docker-Container auch innerhalb von Linux-Servern verwalten.

Mit Visual Studio 2015 Tools for Docker bietet Microsoft auch eine Entwicklungsumgebung zum Erstellen von Anwendungen, die in Containern funktionieren. Dabei spielt es keine Rolle, ob hier Docker auf Linux-Servern oder mit Windows Server Containern in Windows Server 2016 verwendet wird.

Mit dem Docker-Client Windows- und Linux-Container verwalten

Mit dem Windows-Docker-Client ab Version 1.6  können Administratoren Container auf Linux-Servern verwalten, aber auch die Container auf Basis von Windows Server Containern in Windows Server 2016. Der Docker-Client integriert aber keine Container-Technologie in Windows. Diese wird nur durch Windows Server Container auf Basis von Windows Server 2016 zur Verfügung gestellt. Der Client kann die Windows Server Container lediglich verwalten, aber eben auch andere Hosts, die Docker nutzen, zum Beispiel Linux-Server.

Microsoft plant in weiteren Vorabversionen zusätzliche Docker-Funktionen zu integrieren. Die Hyper-V-Technologie soll beispielsweise mit Hyper-V-Container erweitert werden. Mit dem Docker-Client sollen sich in Zukunft in einer zentralen Oberfläche alle Container verwalten lassen, inklusive Linux, Microsoft Azure und Windows Server 2016.

Der Docker-Client soll auch in Zukunft auf Open Source basieren, das gilt auch für die Integration in Windows. Daher steht der Client weiterhin in Github kostenlos zur Verfügung.

Die Docker Toolbox erlaubt für aktuelle Windows-Versionen die Verwaltung von Docker auf Basis von Servern mit Windows Server 2016 oder Linux.

In Windows Server 2016 TP5 ist der Docker-Client bereits enthalten. Der Befehl docker images zeigt vorhandenen Docker-Container auf dem Windows-Server an. Wollen Administratoren einen Container erstellen und starten, verwenden sie den Befehl docker run, zum Beispiel:

docker run -it –name dockerwintest windowsservercore cmd

In Docker können Administratoren Container mit bereits installierten Anwendungen als neues Image speichern und dieses Image für neue Container verwenden. Auf diesem Weg werden also schnell ganze Serverfarmen bereitgestellt, zum Beispiel mit:

docker commit dockertest meincontainerimage

Um Container wird der Befehl docker rm <Name des Containers> verwendet, der Befehl docker rmi <Name des Images> löscht Docker-Images.

Hyper-V-Containers (Bild: Microsoft)

Hyper-V-Container mit Windows Server 2016

Windows Server 2016 bietet auch bereits Unterstützung für die  Hyper-V-Container. Auch diese bauen auf Docker auf, bieten aber noch flexiblere Möglichkeiten zur Erstellung von Containern an. Hyper-V-Container und Windows Server Container werden wohl auch in der fertigen Version von Windows Server 2016 parallel unterstützt. Beide Container-Arten werden in Zusammenarbeit mit Docker zur Verfügung gestellt und lassen sich mit dem Docker-Client verwalten.

Der Vorteil der Hyper-V-Container ist eine größere Isolierung der Container sowie eine Optimierung der Umgebung für Hyper-V, entwickelt von Microsoft und den Entwicklern von Docker. Hyper-V-Container sind optimal von anderen Containern und dem Host isoliert, also noch sicherer und flexibler als Windows Server Container. Da Windows Server Container wichtige Teile des Betriebssystems mit dem Host und untereinander teilen, gibt es generell das Problem, dass ein Container einen ganzen Host und andere Container beeinträchtigt, zumindest theoretisch. Mit Hyper-V-Containern ist das nicht mehr möglich, da hier das Betriebssystem weiter isoliert und virtualisiert wird. Microsoft bietet mit den Hyper-V-Containern auch die Möglichkeit Rechte zu delegieren, zum Beispiel für mandantengestützte Systeme. Hyper-V-Container eines Mandanten können miteinander kommunizieren, während die Container der anderen Mandanten nicht erreichbar sind.

Um einen Container mit Docker als Hyper-V-Container zur Verfügung zu stellen, setzen Administratoren die Isolierungs-Flag. Der Befehl sieht dann zum Beispiel folgendermaßen aus:

Docker run –rm -it -isolation=hyperv nanoserver cmd

Die Bereitstellung von Hyper-V-Containern unterscheidet sich nicht von der Bereitstellung herkömmlicher Container. Hier lässt sich auch das gleiche Image verwenden. Ein Hyper-V-Container ist ein herkömmlicher Windows Server Container , der in einer Hyper-V-Partition installiert ist. Bei Bedarf lassen sich aus Windows Server Container mit wenigen Schritten Hyper-V-Container erstellen und umgekehrt.

Die Konfiguration lässt sich auch mit der PowerShell und dem CMDlet Set-Container vornehmen. Mit diesem CMDlet lässt sich ein Windows Server Container zu einem Hyper-V-Container umwandeln. Dazu wird die Option -RunTimeType HyperV verwendet. Mit der Option -RunTimeType Default wird der Container wieder zu einem Windows Server Container umgewandelt.

Das ermöglicht das Betreiben von Containern mit Anwendungen, die in „Lower Trust“-Umgebungen laufen, zum Beispiel Webserver, die generell anfällig vor Angriffen aus dem Internet sind. Wird ein solcher Container übernommen, sind die anderen Container und vor allem der Host davon nicht betroffen und können uneingeschränkt weiter funktionieren.

Nested Hyper-V-Container (Bild: Microsoft)

Mandanten-Technologie – PaaS und SaaS mit Windows Server 2016

Außerdem lassen sich mit Hyper-V-Containern auch Container betreiben, bei denen Administratoren und Entwickler nicht die volle Kontrolle haben, zum Beispiel in einer Mandanten-Umgebung. Hier lassen sich Container des einen Mandanten miteinander verbinden, von anderen Mandanten sind die Container aber vollständig isoliert. Administratoren können Container auf diese Art also gruppieren.

Die gruppierten Container erhalten jeweils eine eigene Kopie der zugewiesenen Ressourcen, getrennt durch die Hyper-V-Technologie. Da in diesem Fall mehrere Kopien der Ressourcen zur Verfügung gestellt werden müssen, sind Hyper-V-Container etwas langsamer beim Start als Windows Server Container, dafür sind sie noch sicherer und Mandantenfähig. Hyper-V-Container bauen vollständig auf Docker auf und nutzen exakt die gleiche Technologie wie Windows Server Container.

 

Weitere Artikel zum Thema Windows Server 2016:

Themenseiten: Cloud by HPE, Docker, Docker, Microsoft, Windows Server 2016

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Docker und Windows Server 2016 – Das müssen Profis wissen

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *