Blog

Vertiefung in Windows Server Containers und Docker - Teil 1 - Warum sollten wir uns dafür interessieren?

Cornell Knulst

Aktualisiert Oktober 21, 2025
8 Minuten

Mit der Einführung von Windows Server 2016 Technical Preview 3 im August 2015 aktivierte Microsoft die Container-Technologie auf der Windows-Plattform. Während Linux seit August 2008 über seine Container-Technologie verfügte, wurde eine solche Funktionalität auf Microsoft-Betriebssystemen zuvor nicht unterstützt. Dank des Erfolgs von Docker unter Linux beschloss Microsoft vor 2,5 Jahren, mit der Arbeit an einer Container-Implementierung für Windows zu beginnen. Derzeit können wir diese neue Container-Technologie auf Windows Server 2016 und Windows 10 testen. Im vergangenen September (2016) hat Microsoft endlich angekündigt, dass es Windows Server 2016 für die Öffentlichkeit freigegeben hat. Aber was bedeutet das für mich als Entwickler oder für uns als Unternehmensorganisation? In dieser Serie von Blogposts werden wir die verschiedenen Aspekte der Arbeit mit Windows Containern, Docker und die Art und Weise, wie Container die Art und Weise, wie wir unsere Software bereitstellen, verändern werden, näher beleuchten. Doch zunächst werden wir in diesem ersten Blogpost dieser Serie die Frage beantworten, warum wir uns überhaupt mit Containern beschäftigen sollten...

Warum sollte ich mich für Software-Container interessieren?

Um die verschiedenen Vorteile zu erklären, werden wir die Metapher der Schiffscontainer verwenden. Dazu gehen wir zurück zum 26. November 1955. Der Tag, an dem das erste Containerschiff, die Clifford J. Rogers, in Dienst gestellt wurde. Ein Tag, der den Lauf des Welthandels veränderte und den Grundstein für das legte, was zum größten Linienschiffsgeschäft der Welt werden sollte. Aber was war das Besondere an diesem neuen Containerschiff-Konzept? Oder vielleicht eine bessere Frage: Was war der Grund für die Vickers-Werft, ein neues Frachtschiff einzuführen? Kurz gesagt: Geschwindigkeit, Kosten, Standardisierung und Isolierung.

Clifford J. Rogers
Clifford J. Rogers

Geschwindigkeit

Vor dem Aufkommen der Containerisierung in den 1950er Jahren wurden Stückgüter Stück für Stück auf das Schiff geladen, festgezurrt, entzurrt und entladen. Die Fracht wurde von Hand geladen und gelöscht, und riesige Gruppen von Hafenarbeitern verbrachten Stunden damit, die verschiedenen Frachtstücke in die verschiedenen Laderäume einzupassen, um den Schiffsrumpf vollständig beladen zu können. Dank der Einführung der Containerisierung haben sich die Kosten und die Zeit für den Transport enorm verringert. So kann ein Containerschiff in wenigen Stunden be- und entladen werden, während dies bei einem herkömmlichen Frachtschiff Tage dauert. Darüber hinaus konnten die Kosten für die Schifffahrt um das 39-fache gesenkt werden.

Hafenarbeiter
Versand von Massengütern in der Vergangenheit

Das Gleiche gilt für Software-Container. Heutzutage müssen viele Anwendungsbereitstellungen die Zielumgebung in den richtigen Zustand bringen, indem sie verschiedene Installationen und Konfigurationen ausführen. Wie beim Laden von Hand kann dies sehr lange dauern. Noch schlimmer ist die Zeit, die wir warten müssen, wenn wir unsere Anwendung aktualisieren. Genau wie beim manuellen Entladen (des Rumpfs) eines Containerschiffs müssen wir die alte Version unserer Anwendung deinstallieren (und hoffen, dass alle relevanten Dateien entfernt werden), bevor wir die Installation unserer neuen Version durchführen können. Wie beim Versand von Containern hat die Bereitstellung von Anwendungen in Containern enorme Auswirkungen auf die Kosten und den Zeitaufwand für die Bereitstellung unserer Anwendungen. Da unsere Anwendungen bereits in unseren Software-Containern installiert sind, müssen wir diese Container nur von einem Server auf einen anderen "verschieben", damit unsere Anwendungen in unserer neuen Umgebung laufen. Wenn wir eine Bereitstellung unserer containerisierten Anwendung durchführen, sparen wir die Zeit, die wir auf die Installation unserer Anwendung warten müssen. Dies führt zu einer sofortigen Startzeit von Containern. Außerdem müssen wir dank der Isolationsgrenze von Containern (Namespace-Isolation) unsere Anwendungen nicht mehr aktualisieren. Stattdessen sind Container unveränderlich und die Ausführung einer neueren Version einer Anwendung bedeutet, dass wir eine neue Container-Version ausrollen und die alte Container-Version der Anwendung entfernen. Dies führt zu sofortigen "Upgrade"-Zeiten für unsere containerisierten Anwendungen.

Kosten

Der Einsatz von Software-Containern wird zu erheblichen Kosteneinsparungen führen. Erstens, weil sofortige Container-Startzeiten Wartezeiten und Kosten reduzieren. Zweitens, weil Container die Ressourcenkosten, die bei einem isolierten Rollout einzelner Anwendungen anfallen, stark reduzieren. Während in der Vergangenheit virtuelle Maschinen verwendet wurden, um die Ressourcenverwaltung und die Isolierung von Registry, Dateisystem und Prozessen zu gewährleisten, können Container heute das gleiche Maß an Isolierung gewährleisten (mehr zu diesem Isolierungsteil in einem späteren Blogpost in dieser Serie), ohne dass eine VM verwendet werden muss. Im Vergleich zu VMs haben Container einen kleineren Fußabdruck und teilen sich das Betriebssystem. Dadurch lassen sich die Kosten für Betriebssystemlizenzen und Speicherplatz erheblich senken.

Bildnachweis: docker.com
Kosteneffizienz von Containern

Zusätzlich zu den oben genannten Kosteneinsparungen ermöglichen uns Software-Container die einfache Einrichtung, Skalierung und Verwaltung (Selbstheilung) unserer Umgebungen in nur wenigen Minuten. Anstatt viel Zeit und Geld damit zu verschwenden, unsere beschädigten Entwicklungs-, Test- und Produktionsumgebungen zu reparieren, können wir mit Containern mit nur wenigen Befehlen sofort genau dieselbe Umgebung aufsetzen, die wir vorher hatten.

Standardisierung

Dank der Verwendung von Schiffscontainern ist der Umgang mit Fracht in der Welt des Transports stark standardisiert. Wir haben nicht nur eine einheitliche Art des Be- und Entladens, sondern auch andere Aspekte des Transports wie Herkunftskennzeichnung, Gefahrenkennzeichnung, Ladungsbeschreibungen und Griffe sind in hohem Maße standardisiert. Wo früher die Hafenarbeiter über verschiedene Laderäume nachdenken mussten, um die verschiedenen Frachtstücke im Schiffsrumpf unterzubringen, ist der Transport von Fracht heutzutage eine wiederholbare und relativ einfache Tätigkeit. Die Containerisierung hat die Transportkosten gesenkt und die Transportzeiten verkürzt, was wiederum zum Wachstum des internationalen Handels beigetragen hat. Fracht, die früher in Kartons, Kisten, Ballen, Fässern oder Säcken ankam, wird heute in werkseitig versiegelten Containern geliefert, deren Inhalt für das menschliche Auge nicht erkennbar ist, außer einem Produktcode, den Maschinen scannen und Computer zurückverfolgen können. Dieses System der Rückverfolgung ist so genau, dass eine zweiwöchige Reise heutzutage mit einer Genauigkeit von weniger als fünfzehn Minuten für die Ankunft getimt werden kann.

Schiffscontainer vs. Docker-Container
Schiffscontainer vs. Docker-Container

Wie bei der Auslieferung von Containern wird die Standardisierung, die bei der Verwendung von Software-Containern eintritt, die Bereitstellung unserer Anwendungen unglaublich vereinfachen. Wenn Sie sich dafür entscheiden, alle Ihre Anwendungen in Containern bereitzustellen, verwenden Sie die gleichen Basisbefehle zum Starten, Stoppen und Entfernen Ihrer Anwendungen. Dies hat zunächst einmal den Vorteil, dass die Wartungskosten für Ihre Bereitstellungsskripte sinken. Darüber hinaus profitieren Sie dank der Art und Weise, wie die Containertechnologie implementiert ist, von einer einheitlichen Art der Kennzeichnung (ID und Herkunft), Inhaltsbeschreibung und Historienverfolgung Ihrer containerisierten Anwendungen. Nicht zuletzt ermöglicht die Containerisierung Ihrer Anwendungen einen einheitlichen Umgang mit dem Kontext um Ihre Anwendungen herum. Container enthalten nicht nur Ihre Anwendungen, sondern sorgen auch dafür, dass Ihre Anwendung den richtigen Kontext (Konfiguration, Umgebungsvariablen usw.) um sich herum erhält.

Isolierung

Ein wichtiger Teil der Arbeit mit Versandcontainern ist, dass sie sicherstellen, dass der Inhalt eines Containers vom Inhalt anderer Container isoliert ist. Wenn ich einen Container mit einer bestimmten Fracht fülle, z.B. mit Schuhen und Kleidung, sorgt der Containertransport dafür, dass der Inhalt meines Containers versiegelt ist und während des Transports unverändert bleibt. Da diese Transportcontainer versiegelt sind und erst am Zielort geöffnet werden, sind Bruch (aufgrund der geringeren Handhabung), Diebstahl und Diebstahl stark reduziert. Kurz gesagt: Dank ihrer Isolierung maximieren Versandcontainer die Zuverlässigkeit des Transports.

isolation-of-containers
Die Art und Weise, wie Container die Isolierung...

Wie bei den Schiffscontainern erhöht die Verwendung von Software-Containern die Zuverlässigkeit auf zwei verschiedene Arten:

  • Versiegelter Inhalt: Versiegelter Inhalt bedeutet, dass der Inhalt unseres Docker-Containers bei der Initialisierung genau derselbe ist (mit Ausnahme der benutzerdefinierten Parameter), den wir in unserem Container-Image in der zentralen Registrierung definiert hatten. Natürlich können wir den Inhalt unseres Containers, wie bei der Auslieferung von Containern, ändern, während er läuft. Dies ist jedoch nur möglich, indem wir den Container explizit öffnen (Docker exec) und seinen Inhalt ändern.
  • Isolierter Kontext: Isolierter Kontext bedeutet, dass die laufenden Anwendungen innerhalb unseres Containers genau denselben äußeren Kontext haben, unabhängig von verschiedenen Kontexten um unseren Container herum. Der Container selbst definiert den begrenzten Kontext. So wie verrottende Bananen außerhalb eines Versandcontainers keinen Einfluss auf die Qualität unserer Kleidung haben, können Anwendungen außerhalb unseres Containers die Registrierungs-, Prozess- und Dateisystemansicht unseres Containers nicht verändern. Darüber hinaus können sogar die Ressourcen, die für Anwendungen innerhalb eines Containers verfügbar sind, eingeschränkt werden. Diese Implementierung von Resource Governance stellt sicher, dass meinem Container in meiner Entwicklungs- und Produktionsumgebung genau die gleichen Ressourcen zur Verfügung stehen, auch wenn die Anzahl der anderen Container, die in der Umgebung laufen, nicht die gleiche ist.

Zusammenfassung

Wir haben gesehen, dass wir mit Software-Containern unsere Anwendungen schneller, kostengünstiger und mit höherer Qualität (dank der Standardisierung und Isolierung) bereitstellen können. Insbesondere in DevOps/Agile-Organisationen sind Container eine unverzichtbare Lösung, um das richtige Maß an Flexibilität bei der Bereitstellung zu erreichen. Sind wir jetzt fertig? Nein. Jetzt wissen wir zwar, warum wir uns mit Containern beschäftigen sollten, aber wir wissen immer noch nicht, was Windows-Container eigentlich sind und wie sie intern implementiert werden. Deshalb werden wir uns im nächsten Teil dieser Serie eingehend mit der zugrunde liegenden Implementierung und den Interna von Containern unter Windows befassen. Wenn Sie noch Fragen haben, zögern Sie bitte nicht, unten einen Kommentar zu hinterlassen, und ich werde versuchen, Ihre Fragen so schnell wie möglich zu beantworten. Bleiben Sie dran...

Mehr aus dieser Serie

Verfasst von

Cornell Knulst

Cornell works for Xpirit, Hilversum, The Netherlands, as a trainer/architect. He is specialized in the domain of Application Lifecycle Management and Continuous Delivery, with a special focus on Microsoft-based technologies.

Contact

Let’s discuss how we can support your journey.