Die Bereitstellung einer Web-Anwendung auf Basis der Azure App Services unterstützt eine breite Palette an Plattformen bzw. Laufzeitumgebungen. Doch per Docker-Image lassen sie sich auch im benutzerdefinierten mit ein paar Kniffen ausführen.
Das Deployment eines Images auf den Azure App Service lässt sich direkt aus VS Code anstoßen.
(Bild: Drilling / Microsoft)
Basiert eine Webapplikation auf einem der in Azure App Service vordefinierten Anwendungsstapel wie .NET, PHP, Python oder Node.js, erfolgt die Bereitstellung sehr komfortabel und bietet gegenüber IaaS zahlreiche Vorteile. Findet sich die Wunsch-Plattform nicht unter den offiziell unterstützten, lassen sich die Azure App Services aber auch nutzen, um die Anwendung in einem benutzerdefinierten Container mit Linux (Docker) bereitzustellen.
Dieser Beitrag zeigt, wie ein Docker-Image dazu hergenommen wird, um eine Web App in einem benutzerdefinierten Web Application Stack auszuführen, der nicht in Azure vordefiniert ist. In diesem Beispiel stellen wir ein benutzerdefiniertes Image aus einer Azure Container Registry (ACR) in den Azure App Services bereit – und zwar mit Hilfe von VS Code vom eigenen Arbeitsplatz aus.
Zunächst einmal werden die App Service Extension und die Docker-Extension für VS Code benötigt.
(Bild: Drilling / Microsoft)
Um das Beispiel nachvollziehen zu können, wird natürlich ein Azure-Konto benötigt. Auf dem lokalen Arbeitsplatzrechner wollen zusätzlich Docker, Visual Studio Code, die App-Service-Extension für Visual Studio Code und die Docker-Extension für Visual Studio Code installiert sein. Dann müssen wir in Azure eine Container Registry erstellen.
Eine Azure Container Registry mit Admin User ist zwingend erforderlich.
(Bild: Drilling / Microsoft)
Dabei ist zu beachten, dass es ähnlich wie bei einem Azure Key Vault verschiedene Möglichkeiten gibt, Verwaltungs- und/oder Daten-Zugriffe auf die ACR zu autorisieren. Für dieses Beispiel ist es notwendig, dass beim Erstellen der Containerregistrierung die Option „Administratorbenutzer“ aktiv ist. Alternativ lässt sich das über die bereits erstellte Container Registry auch im Azure Portal im Abschnitt „Zugriffsschlüssel“ erledigen. Die Einstellung ist für den App Service-Zugriff zwingend notwendig.
Zugriff auf Container-Registry
Das Anmelden bei Azure aus VS Code heraus.
(Bild: Drilling / Microsoft)
Anschließend öffnen wir am Arbeitsplatz VS Code, klicken in der Aktivitätsleiste auf das Azure Symbol und melden uns am Azure Account an, wozu selbstverständlich die Extension „Azure Account and Sign In“ installiert sein muss. Die Anmeldung erfolgt nach einem Klick links oben auf „Sign in to Azure…“.
VS-Code-Zugriff auf Container-Registries, hier in „Azure“.
(Bild: Drilling / Microsoft)
Danach wählen wir auf der Aktivitätsleiste das Docker-Symbol aus – das setzt natürlich wiederum voraus, dass Docker lokal installiert ist, wenn auch wie in unseren Beispiel „nur“ mittels Docker Desktop unter Windows –, klicken links im Explorer unter „REGISTRIES“ auf „Connect Registry“ und dann im Hauptfenster auf „Azure“. Damit sollte die oben erstellte Registry im Explorer unter „REGISTRIES“ angezeigt werden.
Dockerfile erstellen
Ein neues Docker-File zur Bereitstellung einer .NET-Umgebung aus einem öffentlich von Microsoft gehosteten Image.
(Bild: Drilling / Microsoft)
Nun erstellen wir zunächst einmal ein neues Docker-File. Dieses wandeln wir dann in ein Image um, welches letztlich nach dem Hochladen in die ACR dazu dienen soll, eine benutzerdefinierte containerisierte App bereitzustellen. Dazu öffnen wir in Visual Studio Code einen leeren Ordner und fügen eine neue Datei namens „dockerfile.txt“ mit dem im Bild gezeigten Inhalt für die gewünschten Sprachumgebung, hier „.NET“, hinzu.
Wie die FROM-Anweisung im Docker-File impliziert, ist das übergeordnete Image aus der öffentlichen Microsoft Artifact Registry eines der integrierten .NET-Container vom Azure App Service. Der zugehörige Sourcecode findet sich bei Interesse im zugehörigen GitHub-Repository des Azure App Service.
Das Erzeugen eines Docker-Images aus VS Code.
(Bild: Drilling / Microsoft)
Das Dockerfile macht nicht mehr, als eine einfache .NET-App nach /defaulthome/hostingstart zu kopieren, d. h. das Dockerfile startet letztlich diese App. Dazu muss zunächst mit „build image“ aus dem Dockerfile ein Image erzeugt werden, welches dann in die Container Registry gepusht werden kann. In der Befehls-Palette („View / Command Palette“ oder „Strg+Shift-P“) geben wir hierfür das Kommando …
Docker Images: Build Image
… entweder als Ganzes ein oder navigieren Schritt für Schritt durch die passenden Docker-Befehle.
Das neue Image taucht jetzt im Explorer unter „Images“ auf.
(Bild: Drilling / Microsoft)
Im Feld „Imagetag“ ersetzen Sie „example:latest“ durch das gewünschte Image-Tag im Format <acr-name>.azurecr.io/<image-name>/<tag> an, wobei <acr-name>der Name der von Ihnen erstellten ACR ist und /<image-name> der gewünschte Name des zu erstellenden Images, hier dotnetexample, gefolgt vom Versions-Tag, wie z. B. „latest“. Das Ergebnis sollte etwa so aussehen, wie im vorangestellten Screenshot.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Das Pushen eines Images in die Azure Container Registry.
(Bild: Drilling / Microsoft)
Im Explorer findet sich das neue Container-Abbild schließlich unter „Images“. Nun müssen wir das neue Image lediglich erweitern, damit die Version sichtbar wird (hier „latest“) und können dann im Kontextmenü den Eintrag „Push .:“ wählen, um das Image in der Azure Container Registry zu veröffentlichen. Das Ergebnis sollte wiederum so aussehen, wie in der Abbildung vorne.
Haben wir das „Quasi-Custom-Image“ (hier .Net) erfolgreich in die Azure-Container-Registry hochgeladen, lässt sich daraus im Azure-App-Service die App auf Basis einer Quasi-User-Defined-Runtime bereitstellen. Auch das muss nicht von Hand im Azure-Portal geschehen. Wir klicken stattdessen im Abschnitt „REGISTRIES“ auf den Refresh-Button, damit die neue Registry mit dem Inhalt (latest) auch angezeigt wird.
Hierfür bemühen wir nun erneut das Kontextmenü und wählen den Eintrag „Deploy Image to Azure App Service“ gefolgt von einem global eindeutigen DNS-Name für Ihre containerisierte .NET-App, der gewünschten Resource-Group, Subscription, Location und dem App-Service-Plan. Alles weitere in der untenstehenden Bildergalerie.