Migreren van ASP.NET MVC-toepassingen naar Windows-containers

Het uitvoeren van een bestaande .NET Framework-toepassing in een Windows-container vereist geen wijzigingen in uw app. Als u uw app wilt uitvoeren in een Windows-container, maakt u een Docker-installatiekopie die uw app bevat en start u de container. In dit onderwerp wordt uitgelegd hoe u een bestaande ASP.NET MVC-toepassing gebruikt en implementeert in een Windows-container.

U begint met een bestaande ASP.NET MVC-app en bouwt vervolgens de gepubliceerde assets met Visual Studio. U gebruikt Docker om de image te maken die uw app bevat en draait. Je bladert naar de site die draait in een Windows-container en controleert of de app werkt.

In dit artikel wordt ervan uitgegaan dat u basiskennis hebt van Docker. U vindt meer informatie over Docker door het Docker-overzicht te lezen.

De app die u in een container uitvoert, is een eenvoudige website die willekeurig vragen beantwoordt. Deze app is een eenvoudige MVC-toepassing zonder verificatie of databaseopslag; Hiermee kunt u zich richten op het verplaatsen van de weblaag naar een container. Toekomstige onderwerpen laten zien hoe u permanente opslag verplaatst en beheert in containertoepassingen.

Het verplaatsen van uw toepassing omvat de volgende stappen:

  1. Een publicatietaak maken om de assets voor een afbeelding te bouwen.
  2. Een Docker-image bouwen dat uw toepassing uitvoert.
  3. Een Docker-container starten die uw afbeelding uitvoert.
  4. De toepassing verifiëren met behulp van uw browser.

De voltooide toepassing bevindt zich op GitHub.

Vereiste voorwaarden

De ontwikkelcomputer moet over de volgende software beschikken:

Belangrijk

Als u Windows Server 2016 gebruikt, volgt u de instructies voor containerhostimplementatie - Windows Server.

Nadat u Docker hebt geïnstalleerd en gestart, klikt u met de rechtermuisknop op het pictogram van het systeemvak en selecteert u Overschakelen naar Windows-containers. Dit is vereist om Docker-installatiekopieën uit te voeren op basis van Windows. Het uitvoeren van deze opdracht duurt enkele seconden:

Windows-container

Script publiceren

Verzamel alle assets die u in een Docker-image wilt plaatsen op één plek. U kunt de opdracht Publiceren in Visual Studio gebruiken om een publicatieprofiel voor uw app te maken. Met dit profiel worden alle assets in één mapstructuur geplaatst die u later in deze tutorial naar uw doelimage kopieert.

Stappen voor publiceren

  1. Klik met de rechtermuisknop op het webproject in Visual Studio en selecteer Publiceren.
  2. Klik op de knop Aangepast profiel, en selecteer daarna Bestandssysteem als methode.
  3. Kies de map. Het gedownloade voorbeeld maakt standaard gebruik van bin\Release\PublishOutput.

Verbinding publiceren

Open de sectie Opties voor het publiceren van bestanden op het tabblad Instellingen . Selecteer Precompile tijdens het publiceren. Deze optimalisatie betekent dat u weergaven gaat compileren in de Docker-container. U kopieert de vooraf gecompileerde weergaven.

Publicatie-instellingen

Klik op Publiceren en Visual Studio kopieert alle benodigde assets naar de doelmap.

De image bouwen

Maak een nieuw bestand met de naam Dockerfile om uw Docker-installatiekopieën te definiëren. Dockerfile bevat instructies voor het bouwen van de uiteindelijke installatiekopieën en bevat namen van basisinstallatiekopieën, vereiste onderdelen, de app die u wilt uitvoeren en andere configuratie-installatiekopieën. Dockerfile is de invoer voor het docker build commando dat de image creëert.

Voor deze oefening bouwt u een afbeelding op basis van de microsoft/aspnet afbeelding op Docker Hub. De basisimage, mcr.microsoft.com/dotnet/framework/aspnet:4.8, is een Windows Server-image. Het bevat Windows Server Core, IIS en ASP.NET 4.8. Wanneer u deze image in uw container uitvoert, worden IIS en de geïnstalleerde websites automatisch gestart.

De Dockerfile die uw image maakt, ziet er als volgt uit:

# The `FROM` instruction specifies the base image. You are
# extending the `mcr.microsoft.com/dotnet/framework/aspnet:4.8` image.

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8

# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot

Er is geen ENTRYPOINT opdracht in dit Dockerfile. Je hebt er geen nodig. Bij het uitvoeren van Windows Server met IIS is het IIS-proces het invoerpunt, dat is geconfigureerd om te starten in de aspnet-basisafbeelding.

Voer de opdracht Docker Build uit om de installatiekopieën te maken waarop uw ASP.NET-app wordt uitgevoerd. Hiervoor opent u een PowerShell-venster in de map van uw project en typt u de volgende opdracht in de oplossingsmap:

docker build -t mvcrandomanswers .

Met deze opdracht wordt de nieuwe image gemaakt met behulp van de instructies in uw Dockerfile, waarbij de image als mvcrandomanswers wordt getagd (-t). Dit kan bijvoorbeeld het ophalen van de basisinstallatiekopie uit Docker Hub zijn en vervolgens uw app toevoegen aan die installatiekopie.

Zodra deze opdracht is voltooid, kunt u het docker images commando uitvoeren om informatie over de nieuwe image weer te geven.

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mvcrandomanswers              latest              86838648aab6        2 minutes ago       10.1 GB

De afbeeldings-ID zal anders zijn op uw computer. Nu gaan we de app uitvoeren.

Een container starten

Start een container door de volgende docker run opdracht uit te voeren:

docker run -d --name randomanswers mvcrandomanswers

Het -d argument vertelt Docker om de afbeelding in losgekoppelde modus te starten. Dit betekent dat de Docker-image losgekoppeld van de huidige shell wordt uitgevoerd.

In veel Docker-voorbeelden ziet u mogelijk -p om de container- en hostpoorten toe te wijzen. De standaard aspnet-afbeelding heeft de container al geconfigureerd om verbindingen op poort 80 te accepteren en deze te publiceren.

De --name randomanswers naam geeft een naam aan de actieve container. U kunt deze naam gebruiken in plaats van de container-id in de meeste opdrachten.

De mvcrandomanswers is de naam van het image om te starten.

Controleren in de browser

Zodra de container is gestart, maakt u verbinding met de actieve container met behulp van http://localhost het voorbeeld dat wordt weergegeven. Typ die URL in uw browser en u ziet de actieve site.

Opmerking

Sommige VPN- of proxysoftware voorkomt mogelijk dat u naar uw site navigeert. U kunt deze tijdelijk uitschakelen om ervoor te zorgen dat uw container werkt.

De voorbeeldmap op GitHub bevat een PowerShell-script waarmee deze opdrachten voor u worden uitgevoerd. Open een PowerShell-venster, wijzig de map in uw oplossingsmap en typ:

./run.ps1

Met de bovenstaande opdracht worden de images gebouwd, wordt de lijst van images op uw machine weergegeven en wordt een container gestart.

Als u de container wilt stoppen, voert u een docker stop opdracht uit:

docker stop randomanswers

Als u de container wilt verwijderen, voert u een docker rm opdracht uit:

docker rm randomanswers