.NET 7 SDK - build-in container support
Či chceme alebo nie tak docker sa stáva už aj pri vývoji dotnet aplikácií štandardom. Väčšina návodov a článkov ukazuje aké je jednoduché kontajnerizovať dotnet aplikáciu.
Napríklad niečo takéto:
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Problém nastáva akonáhle máme väčšie solution, zložitejšie vzťahy medzi projektami prípadne používame Directory.Packages.props
alebo NuGet.config
, ktoré sú v inom adresári ako je Dockerfile
.
Chalani v Microsofte sa to rozhodli riešiť a pridali podporu pre build-in kontajnerizáciu priamo do .NET 7 SDK. Miesto toho aby sme museli vytvárať vlastný Dockerfile
, špecifikovať všetky závislosti a vytvárať kontajner, je to teraz zahrnuté v publish procese dotnet-u. Napríklad dotnet publish --os linux --arch x64 -c Release -p:PublishProfile=DefaultContainer
vygeneruje image, ktorý je pripravený na spustenie.
# create a new project 👇
dotnet new mvc -n my-test-app
cd my-test-app
# add package that creates the container (is not include in to your assembly) 👇
# ℹ️ Note: This package only supports Web projects (those that use the Microsoft.NET.Sdk.Web SDK) in this version.
dotnet add package Microsoft.NET.Build.Containers
# publish your project for linux-x64 (required if you not on linux OS) 👇
dotnet publish --os linux --arch x64 -c Release -p:PublishProfile=DefaultContainer
# run your app using the new container 👇
docker run -it --rm -p 5000:80 my-test-app:1.0.0
Super jednoduché. Vytvoríme projekt, pridáme balíček (ktorý je len na build, nie je potrebný pre beh aplikácie) a zavoláme publish. Výsledkom je image, ktorý je pripravený na spustenie.
Tento postup je možné použiť aj na existujúce dotnet 6.0 aplikácie. Podmienkou je .NET 7 SDK a balíček
Microsoft.NET.Build.Containers
.
Konfigurácia
Čo keď chcem niečo zmeniť? Platformu, base image prípadne názov výsledného image? Všetko je možné konfigurovať priamo vo vašom .cspoj
súbore.
Viac info priamo v dokumentácií.