Blazor mit Docker starten.
Blazor mit Docker starten.

Clean Architecture: Blazor Server mit Docker starten

Mein Ziel ist die Bereitstellung meines Blazor Server Projekts mit Docker. Docker ist sehr praktisch, um alle Softwareressourcen in einem Image zu bündeln und unabhängig vom Betriebssystem auszuführen. Für genauere Informationen was Docker ist, möchte ich auf andere Quellen (z.B. https://www.docker.com/) im Internet verweisen. Mein Projekt habe ich ein Repository auf GitHub erstellt (https://github.com/LarsHieronymi/Blog-Blazor-Example-Project/tree/blazor-server-dockerfile).

Voraussetzungen

Ich habe als erstes ein Projekt aufgesetzt. Als Architektur habe ich mich an eine Clean Architecture gehalten. Wie ich so ein Projekt in Visual Studio Code aufsetze habe ich in einem vorherigen Artikel beschrieben.

Desweiteren installiere ich Docker Desktop auf meinem Windows Rechner. Docker ist für alle Plattformen verfügbar. Genaue Installationsanleitungen findest du auf der Docker Webseite.

Dockerfile erstellen

Um mein Blazor Server Projekt als Docker Image zu bauen, muss ich eine Dockerfile anlegen. In Visual Studio Code muss ich eine Datei mit dem Namen Dockerfile anlegen. In Visual Studio kann ich mir die Datei mit Inhalt für mein Projekt erstellen lassen.

Dockerfile erstellen in Visual Code
Dockerfile erstellen in Visual Code.

Obwohl ich auf einem Windows Rechner arbeite, wähle ich als Zielbetriebssystem Linux aus.

Betriebssystem auswählen
Zielbetriebssystem auswählen. Ich wähle hier Linux aus.

Die Dockerfile Datei ist in mehrere Abschnitte aufgeteilt und ist im nächsten Codeblock abgebildet.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["src/Presentation/Server/Server.csproj", "src/Presentation/Server/"]
COPY ["src/Infrastructure/Infrastructure.csproj", "src/Infrastructure/"]
COPY ["src/Application/Application.csproj", "src/Application/"]
COPY ["src/Domain/Domain.csproj", "src/Domain/"]
RUN dotnet restore "src/Presentation/Server/Server.csproj"
COPY . .
WORKDIR "/src/src/Presentation/Server"
RUN dotnet build "Server.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Server.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Server.dll"]

Der erste Codeblock (Zeilen 1-4) bildet das Basis Image, um den Container zu bauen. Es wird ein Pfad für das Programm definiert und die Ports 80 und 443 nach außen zur Verfügung gestellt.

Der nächste Abschnitt (Zeilen 6-15) ist wichtig für die Erstellung bzw. das Bauen der Softwareapplikation. Hier wird auch ein anderes Image als Grundlage genommen. Dieses Image enthält alle wichtigen Komponenten, um eine .Net Anwendung zu bauen. Es werden alle Projekte kopiert, weil die Projekte voneinander abhängig sind. Zusätzlich wird ein dotnet restore und eine dotnet build ausgeführt. Damit wird die Anwendung gebaut.

In den Zeilen 17 und 18 wird noch ein dotnet publish ausgeführt. Als Image wird das aus dem vorherigen Abschnitt genommen.

Als letztes wird in den Zeilen 20-23 ein fertiges Image mit der Anwendung erstellt. Das Image vom Anfang wird als Grundlage verwendet. Die Anwendung wird aus dem publish Image kopiert. In Zeile 23 wird beim Start des Images ein Befehl festgelegt, damit die Blazor Server App auch startet, wenn der Container startet.

Die Unterteilung in diese Abschnitte sorgt für ein schnelleres bauen nach Änderungen im Code.

Image bauen & Container starten

Um die Blazor Server App zu im Container zu starten, muss ich als erstes das Image erstellen. Das Image erstelle ich mit Hilfe der Dockerfile, die ich im vorherigen Abschnitt erstellt habe. Mit dem Befehlt docker build wird das Image gebaut. Um den Befehl auszuführen, sollte ich mich im Hauptprojektverzeichnis befinden.

docker build -f .\src\Presentation\Server\Dockerfile -t server .

Zum Starten des Containers verwende ich docker run. Ich mache den Port 80 vom Container auf dem Port 5000 sichtbar und gebe noch einen Namen sowie das Image Tag mit, dass ich vorher beim Bau erstellt habe.

docker run -d -p 5000:80 --name Server server

Jetzt kann ich die Blazor Server App über die Adresse http://localhost:5000/ in meinem Browser erreichen.

Links

Schreibe einen Kommentar

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