Blog

Bereitstellung von ASP.NET 4.5 auf Docker unter Windows

Marcel de Vries

Aktualisiert Oktober 21, 2025
8 Minuten

Wenn Sie derzeit im Internet nach ASP.NET und Docker suchen, finden Sie nur, wie Sie ASP.NET Core-Anwendungen in einem Linux-Docker-Container bereitstellen können. Obwohl ich die Initiative von ASP.NET Core sehr schätze, glaube ich, dass viele von Ihnen ASP.NET 4.5 bereits kennen und lieben und niemand darüber spricht, wie wir Docker unter Windows nutzen können, um diese Vollversion von ASP.NET auszuführen

Für den Anfang benötigen wir eine Windows-Version, die in der Lage ist, Docker nativ auszuführen. Mit "nativem Docker" meine ich, dass Docker in das Betriebssystem eingebaut ist. Also keine Verwendung von Docker für Windows-Tools, denn wir wollen keine Linux-Container, sondern Windows-Container ausführen! Im Moment können Sie Windows 10 Anniversary Edition und Windows Server 2016 Technical Preview 5 verwenden, um die hier beschriebenen Schritte auszuführen, damit Ihre ASP.NET 4.5-Website in einem Docker auf Windows-Container läuft.

Was brauchen wir, um eine ASP.NET-Website in einem Windows-Docker-Container zu installieren?

Wenn Sie eine ASP.NET 4.5 Website betreiben, benötigen Sie die folgenden Dinge:

  • Das Betriebssystem mit installiertem IIS
  • ASP.NET 4.5 installiert
  • Webdeploy installiert

Ich persönlich verwende gerne Web-Deploy, um die Website nach der Erstellung bereitzustellen. Dies kann auf genau dieselbe Weise geschehen wie die Bereitstellung auf Azure App Services oder Ihrem lokalen IIS-Server auf einem beliebigen Server, den Sie bereits kennen und lieben.

Aufbau des Containers mit IIS, ASP.NET und Webdeploy

Im Folgenden finden Sie die Schritte, die Sie unternehmen müssen, um einen Docker-Container zu erstellen, der alle diese erforderlichen Bestandteile enthält:

Zunächst benötigen wir ein Basis-Betriebssystem-Image von Docker Hub. Dazu können Sie den folgenden Befehl in der Kommandozeile ausführen:

docker pull microsoft/windowsservercore

Jetzt haben wir das Bild in unserer Bildergalerie. Sie können dies mit dem folgenden Befehl überprüfen:

Docker-Images

Das Ergebnis sollte in etwa dem folgenden Screenshot entsprechen:

 

Jetzt können wir mit der ersten Schicht beginnen, nämlich der Installation von IIS. Dazu können Sie unter Windows den Befehl dism verwenden und ihn in den Argumenten angeben, um die IIS-Webserver-Rolle in Windows Server Core zu installieren. Sie können dies an einer interaktiven Eingabeaufforderung tun oder den Befehl docker build verwenden. Ich bevorzuge letzteres. Dazu erstellen wir ein Dockerfile, das die folgenden Anweisungen enthält:

FROM microsoft/windowsservercore 
RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart

Nachdem Sie die Datei unter dem Namen dockerfile ohne Erweiterungen gespeichert haben, führen Sie eine Befehlszeile aus, um das Image zu erstellen:

docker build -t windowsserveriis .

Der Befehl weist docker an, ein Abbild zu erstellen, ihm das Tag windowsserveriis zu geben und den aktuellen Ordner (mit dem Punkt gekennzeichnet) als Kontext für die Erstellung des Abbilds zu verwenden. Das bedeutet, dass sich alles, was in der Dockerdatei angegeben ist, auf diesen Kontext bezieht. Beachten Sie, dass Sie für den Tag-Namen nur Kleinbuchstaben verwenden dürfen.

Nachdem Sie den Befehl ausgeführt haben, verfügen Sie nun über ein neues Docker-Image mit dem Namen windowsserveriis

Wenn Sie nun den Befehl ausführen:

Docker-Images

sehen Sie das neue Bild verfügbar

Bild

Wir können den nächsten Schritt machen und ASP.NET 4.5 installieren

Wir können dies auf ähnliche Weise tun, indem wir eine Docker-Datei mit den folgenden Befehlen erstellen:

FROM windowsserveriis
 RUNdism /online /aktivieren-feature /featurename:IIS-ASPNET45

und nachdem Sie die Datei gespeichert haben, können Sie die Befehlszeile aufrufen, um das Image zu erstellen:

docker build -t windowsserveriisaspnet .

Jetzt haben wir ein Image, das in der Lage ist, eine ASP.NET-Anwendung auszuführen. Der nächste Schritt ist die Installation von webdeploy in dem Container. Dazu müssen wir das Installationsprogramm für webdeploy herunterladen und dann einen Befehl zur Installation erteilen und warten, bis die Installation abgeschlossen ist. Wir laden das Installationsprogramm zunächst in denselben Ordner wie die Dockerdatei herunter und fügen es dann dem Image hinzu. Bei den folgenden Schritten gehe ich davon aus, dass Sie das MSI (WebDeploy_2_10_amd64_de-US.msi) bereits heruntergeladen haben und es sich im gleichen Ordner wie die Dockerdatei befindet. Bei der Installation der msi werden wir msiexec verwenden und müssen einen Prozess starten, auf dessen Fertigstellung wir warten können. Wenn wir nur msiexec ausführen würden, kehrt dieser Befehl zurück und läuft im Hintergrund, so dass der Container beendet wird und wir uns in einem undefinierten Zustand befinden.

Wenn Sie die folgende Dockerdatei erstellen, installieren Sie webdeploy:

FROM windowsserveriisaspnet

RUN mkdir c:install

 

ADD WebDeploy_2_10_amd64_de-US.msi /install/WebDeploy_2_10_amd64_de-US.msi

 

WORKDIR /install

 

RUN powershell start-Process msiexec.exe -ArgumentList '/i c:installWebDeploy_2_10_amd64_de-US.msi /qn' -Wait


Beachten Sie, dass wir powershell start-process mit der Option -wait verwenden, so dass wir warten, bis die Installation abgeschlossen ist, bevor wir die neue Ebene übertragen.

Führen Sie nun den Docker-Befehl erneut aus, um das Image mit dem neuen Dockerfile zu erstellen:

docker build -t windowsserveriisaspnetwebdeploy .

Jetzt haben wir ein Image, mit dem wir unsere Website im IIS hosten können, und verwenden webdeploy, um unsere Website zu installieren.

Alles in einer einzigen Dockerdatei

In den vorherigen Schritten haben wir für jeden Schritt eine neue Docker-Datei erstellt. Es ist aber wahrscheinlich besser, dies in einer einzigen Datei zu tun, in der alle Befehle zusammengefasst sind, so dass Sie denselben Endzustand erhalten. Wir können den Prozess auch ein wenig optimieren, da Microsoft bereits ein Image namens microsoft/iis bereitstellt, in dem die iis-Funktion aktiviert ist. Das bedeutet, dass wir dieses Image als Basisschicht verwenden und die Installation von IIS überspringen können.

Die vereinfachte Docker-Datei sieht wie folgt aus:

FROM microsoft/iis
RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart
RUN mkdir c:install
ADD WebDeploy_2_10_amd64_de-US.msi /install/WebDeploy_2_10_amd64_de-US.msi
WORKDIR /install
RUN powershell start-Process msiexec.exe -ArgumentList '/i c:installWebDeploy_2_10_amd64_de-US.msi /qn' -Wait

Nun führen wir wieder den Befehl docker build aus, um das Docker-Image zu erhalten, das unsere Website ausführen kann, und verwenden die webdeploy-Pakete, die durch ein Standard-ASP.NET-Build-Verfahren erzeugt werden können.

docker build -t windowsserveriisaspnetwebdeploy .

Der letzte Schritt besteht darin, Ihr webdeploy-Paket auf dem Image zu verteilen.

Das webdeploy-Paket erhalten

Bevor wir unsere Website bereitstellen können, benötigen wir das webdeploy-Paket.

Ich nehme an, Sie haben ein Standard-ASP.NET-Webprojekt in Visual Studio. In diesem Fall können Sie das Bereitstellungspaket ganz einfach in Visual Studio erstellen (im nächsten Beitrag zeige ich Ihnen, wie Sie dies mit VSTS/TFS-Builds tun)

Wenn Sie mit der rechten Maustaste auf das Visual Studio-Projekt klicken, können Sie die Option Veröffentlichen wählen:

Bild

Nachdem Sie Veröffentlichen gewählt haben, wird das folgende Dialogfeld angezeigt:

Bild

Um nur ein Paket zu erstellen, anstatt es auf einen Server oder Azure zu verteilen, wähle ich Benutzerdefiniert

Bild

dann geben Sie dem Profil einen Namen, in meinem Fall dockerdeploydemo

Bild

Wählen Sie dann das Web Deploy-Paket aus der Dropdown-Liste aus und geben Sie die erforderlichen Informationen, den Speicherort des Pakets und den Namen der Website ein.

Bild

Als nächstes können Sie beliebige Datenbankverbindungen einrichten, falls Sie welche haben. In meinem Fall habe ich keine Datenbank.

Bild

Klicken Sie anschließend auf Veröffentlichen und Sie finden das resultierende Bereitstellungspaket und die dazugehörigen Bereitstellungsdateien im Ordner c:temp

Bild

Jetzt, da wir das webdeploy-Paket und die dazugehörigen Bereitstellungsartefakte haben, können wir wieder eine Docker-Datei erstellen, die das Paket in den Container hochlädt und die Website in dem Container installiert. Damit haben Sie ein vollständiges Docker-Image, auf dem Ihre Website läuft.

Veröffentlichen Sie die Website im Docker-Container

Das Dockerfile zur Bereitstellung Ihrer Website sieht wie folgt aus:

FROM windowsserveriisaspnetwebdeploy  

RUN mkdir c:webapplication

WORKDIR /webapplication

ADD dockerdeploydemo.zip /webapplication/dockerdeploydemo.zip

ADD dockerdeploydemo.deploy.cmd /webapplication/dockerdeploydemo.deploy.cmd ADD dockerdeploydemo.SetParameters.xml /webapplication/dockerdeploydemo.SetParameters.xml

RUN dockerdeploydemo.deploy.cmd, /Y


Wir bauen den Container erneut mit dem Befehl docker build:

docker build -t mycontainerizedwebsite .

Damit haben wir nun endlich unsere Webanwendung in einem Container, den wir auf jedem Windows-Server ausführen können, auf dem Windows-Container aktiviert sind.

Ausführen der Website im Container

Um zu testen, ob wir erfolgreich waren, rufen wir nun den Befehl docker run auf und ordnen den Container-Port 80 einem Port auf unserem Host zu. Dazu verwenden Sie die Option -p, mit der Sie einen Quell- und Zielport angeben. Außerdem müssen wir einen Befehl angeben, der dafür sorgt, dass der Container weiterläuft. Dazu verwenden wir nun z.B. einen Befehl wie ping -t, der eine endlose Ping-Schleife erzeugt, die ausreicht, um den Container am Laufen zu halten. Um den Container zu testen, führen wir nun folgenden Befehl aus:

docker run -p 80:80 mycontainerizedwebsite ping localhost -t

Jetzt können wir die Website aufrufen. Beachten Sie, dass Sie den Container nur von außen erreichen können. Wenn Sie also zu localhost browsen würden, was zu 127.0.0.0 führt, werden Sie keine Ergebnisse sehen. Sie müssen Ihren Rechner über seinen tatsächlichen Hostnamen oder seine externe IP-Adresse ansprechen.

Zusammenfassung

Um zusammenzufassen, was wir getan haben, haben wir zunächst ein Docker-Image erstellt, auf dem IIS ausgeführt werden kann, dann ASP.NET 4.5 hinzugefügt, dann webdeploy hinzugefügt und schließlich unsere Website mithilfe von webdeploy und dem von Visual Studio generierten Paket auf dem Container bereitgestellt.

Im nächsten Beitrag zeige ich Ihnen, wie wir dieses Image in der Build- und Release-Verwaltung mit VSTS verwenden und dann den Container auf einem Server bereitstellen können, damit wir automatisierte Tests als Schritt in der Auslieferungspipeline durchführen können.

Verfasst von

Marcel de Vries

Marcel is a key figure in the technology sector, serving as the co-founder and Global MD & CTO of Xebia Microsoft Services. He is deeply involved in advancing organizational capabilities to deploy software swiftly and securely, emphasizing the importance of innovation and productivity while maintaining compliance. Marcel is passionate about technology and continuous learning, often sharing his insights at leading industry events and through online courses on Pluralsight. Recognized for his contributions, Marcel has been honored with the Microsoft MVP award for over 17 consecutive years and is a Microsoft Regional Director since 2008. His expertise spans across Cloud Adoption Strategies, DevOps, and various cloud computing frameworks, making him a respected voice in the tech community.

Contact

Let’s discuss how we can support your journey.