Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Belangrijk
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikel voor de huidige release.
In dit artikel wordt beschreven hoe u een ASP.NET Core-app uitvoert in Docker-containers.
Windows Home Edition biedt geen ondersteuning voor Hyper-V en Hyper-V is nodig voor Docker.
Zie Containerize een .NET-app met dotnet publish voor informatie over het containeriseren van een .NET-app met dotnet publish.
ASP.NET Core Docker-afbeeldingen
Voor deze zelfstudie downloadt u een ASP.NET Core-voorbeeld-app en voert u deze uit in Docker-containers. Het voorbeeld werkt met zowel Linux- als Windows-containers.
Het Dockerfile-voorbeeld maakt gebruik van de docker-buildfunctie met meerdere fasen om in verschillende containers te bouwen en uit te voeren. De build- en runcontainers worden gemaakt op basis van images die door Microsoft op Docker Hub worden geleverd.
dotnet/sdkIn het voorbeeld wordt deze afbeelding gebruikt voor het bouwen van de app. De schijfkopie bevat de .NET SDK, inclusief de Command Line Tools (CLI). De image is geoptimaliseerd voor lokale ontwikkeling, foutopsporing en unit tests. De hulpprogramma's die voor ontwikkeling en compilatie zijn geïnstalleerd, maken de afbeelding relatief groot.
dotnet/aspnetIn het voorbeeld wordt deze afbeelding gebruikt voor het uitvoeren van de app. De afbeelding bevat de ASP.NET Core-runtime en -bibliotheken en is geoptimaliseerd voor het draaien van apps in een productieomgeving. Ontworpen voor snelle implementatie en het opstarten van apps, is de installatiekopie relatief klein, zodat netwerkprestaties tussen Docker Registry en Docker-host zijn geoptimaliseerd. Alleen de binaire bestanden en inhoud die nodig zijn om een app uit te voeren, worden gekopieerd naar de container. De inhoud is klaar om te worden uitgevoerd, waardoor het mogelijk is om de snelste tijd van
docker runnaar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.
Vereiste voorwaarden
De voorbeeld-app downloaden
Download het voorbeeld door de .NET Docker-opslagplaats te klonen:
git clone https://github.com/dotnet/dotnet-docker
De app lokaal uitvoeren
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de volgende opdracht uit om de app lokaal te bouwen en uit te voeren:
dotnet runGa naar
http://localhost:<port>in een browser om de app te testen.Druk op Ctrl+C bij de opdrachtprompt om de app te stoppen.
Uitvoeren in een Linux-container of Windows-container
Als u wilt uitvoeren in een Linux-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Linux-containers.
Als u wilt uitvoeren in een Windows-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Windows-containers.
Navigeer naar de map Dockerfile op dotnet-docker/samples/aspnetapp.
Voer de volgende opdrachten uit om het voorbeeld in Docker te bouwen en uit te voeren:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetappDe
buildopdrachtargumenten:- Noem de afbeelding aspnetapp.
- Zoek naar het Dockerfile in de huidige map (let op de punt aan het einde).
De argumenten van het uitvoeren van het commando:
- Wijs een pseudo-TTY toe en houd deze open, zelfs als deze niet is gekoppeld. (Hetzelfde effect als
--interactive --tty.) - Verwijder de container automatisch wanneer deze wordt afgesloten.
- Koppel
<port>op de lokale computer aan poort 8080 in de container. - Geef de container een naam aspnetcore_sample.
- Geef de aspnetapp-afbeelding op.
Ga naar
http://localhost:<port>in een browser om de app te testen.
Handmatig bouwen en implementeren
In sommige scenario's wilt u mogelijk een app implementeren in een container door de assets die nodig zijn tijdens runtime te kopiëren. In deze sectie ziet u hoe u handmatig implementeert.
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de opdracht dotnet publish uit:
dotnet publish -c Release -o publishedDe opdrachtargumenten:
- Bouw de app in de releasemodus (de standaardmodus voor foutopsporing).
- Maak de assets in de gepubliceerde map.
Voer de app uit.
Windows
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Ga naar
http://localhost:<port>om de startpagina te zien.
"Als u de handmatig gepubliceerde app in een Docker-container wilt gebruiken, maakt u een nieuw Dockerfile en gebruikt u de docker build . opdracht om een afbeelding te maken."
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Gebruik het docker images commando om de nieuwe afbeelding te zien.
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In het voorgaande Dockerfile worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de *.csproj bestanden sinds de laatste docker build opdracht niet zijn gewijzigd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
Aanvullende bronnen
- Een .NET-app containeriseren met dotnet publish
- Docker build-commando
- Docker-opdracht uitvoeren
- ASP.NET Core Docker-voorbeeld (het voorbeeld dat in deze zelfstudie wordt gebruikt.)
- ASP.NET Core configureren voor gebruik met proxyservers en load balancers
- Werken met Visual Studio Docker Tools
- Foutopsporing met Visual Studio Code
- GC met Docker en kleine containers
- System.IO.IOException: De geconfigureerde gebruikerslimiet (128) op het aantal inotify-exemplaren is bereikt
- Updates voor Docker-installatiekopieën
Volgende stappen
De Git-opslagplaats met de voorbeeld-app bevat ook documentatie. Zie het README-bestand voor een overzicht van de resources die beschikbaar zijn in de opslagplaats. In het bijzonder leert u hoe u HTTPS implementeert:
ASP.NET Core Docker-afbeeldingen
Voor deze zelfstudie downloadt u een ASP.NET Core-voorbeeld-app en voert u deze uit in Docker-containers. Het voorbeeld werkt met zowel Linux- als Windows-containers.
Het Dockerfile-voorbeeld maakt gebruik van de docker-buildfunctie met meerdere fasen om in verschillende containers te bouwen en uit te voeren. De build- en runcontainers worden gemaakt op basis van images die door Microsoft op Docker Hub worden geleverd.
dotnet/sdkIn het voorbeeld wordt deze afbeelding gebruikt voor het bouwen van de app. De schijfkopie bevat de .NET SDK, inclusief de Command Line Tools (CLI). De image is geoptimaliseerd voor lokale ontwikkeling, foutopsporing en unit tests. De hulpprogramma's die voor ontwikkeling en compilatie zijn geïnstalleerd, maken de afbeelding relatief groot.
dotnet/aspnetIn het voorbeeld wordt deze afbeelding gebruikt voor het uitvoeren van de app. De afbeelding bevat de ASP.NET Core-runtime en -bibliotheken en is geoptimaliseerd voor het draaien van apps in een productieomgeving. Ontworpen voor snelle implementatie en het opstarten van apps, is de installatiekopie relatief klein, zodat netwerkprestaties tussen Docker Registry en Docker-host zijn geoptimaliseerd. Alleen de binaire bestanden en inhoud die nodig zijn om een app uit te voeren, worden gekopieerd naar de container. De inhoud is klaar om te worden uitgevoerd, waardoor het mogelijk is om de snelste tijd van
docker runnaar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.
Vereiste voorwaarden
De voorbeeld-app downloaden
Download het voorbeeld door de .NET Docker-opslagplaats te klonen:
git clone https://github.com/dotnet/dotnet-docker
De app lokaal uitvoeren
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de volgende opdracht uit om de app lokaal te bouwen en uit te voeren:
dotnet runGa naar
http://localhost:<port>in een browser om de app te testen.Druk op Ctrl+C bij de opdrachtprompt om de app te stoppen.
Uitvoeren in een Linux-container of Windows-container
Als u wilt uitvoeren in een Linux-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Linux-containers.
Als u wilt uitvoeren in een Windows-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Windows-containers.
Navigeer naar de map Dockerfile op dotnet-docker/samples/aspnetapp.
Voer de volgende opdrachten uit om het voorbeeld in Docker te bouwen en uit te voeren:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetappDe
buildopdrachtargumenten:- Noem de afbeelding aspnetapp.
- Zoek naar het Dockerfile in de huidige map (let op de punt aan het einde).
De argumenten van het uitvoeren van het commando:
- Wijs een pseudo-TTY toe en houd deze open, zelfs als deze niet is gekoppeld. (Hetzelfde effect als
--interactive --tty.) - Verwijder de container automatisch wanneer deze wordt afgesloten.
- Koppel
<port>op de lokale computer aan poort 8080 in de container. - Geef de container een naam aspnetcore_sample.
- Geef de aspnetapp-afbeelding op.
Ga naar
http://localhost:<port>in een browser om de app te testen.
Handmatig bouwen en implementeren
In sommige scenario's wilt u mogelijk een app implementeren in een container door de assets die nodig zijn tijdens runtime te kopiëren. In deze sectie ziet u hoe u handmatig implementeert.
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de opdracht dotnet publish uit:
dotnet publish -c Release -o publishedDe opdrachtargumenten:
- Bouw de app in de releasemodus (de standaardmodus voor foutopsporing).
- Maak de assets in de gepubliceerde map.
Voer de app uit.
Windows
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Ga naar
http://localhost:<port>om de startpagina te zien.
"Als u de handmatig gepubliceerde app in een Docker-container wilt gebruiken, maakt u een nieuw Dockerfile en gebruikt u de docker build . opdracht om een afbeelding te maken."
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Gebruik het docker images commando om de nieuwe afbeelding te zien.
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In het voorgaande Dockerfile worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de bestanden niet zijn gewijzigd sinds de *.csproj opdracht voor het docker build laatst is uitgevoerd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
Aanvullende bronnen
- Een .NET-app containeriseren met dotnet publish
- Docker build-commando
- Docker-opdracht uitvoeren
- ASP.NET Core Docker-voorbeeld (het voorbeeld dat in deze zelfstudie wordt gebruikt.)
- ASP.NET Core configureren voor gebruik met proxyservers en load balancers
- Werken met Visual Studio Docker Tools
- Foutopsporing met Visual Studio Code
- GC met Docker en kleine containers
- System.IO.IOException: De geconfigureerde gebruikerslimiet (128) op het aantal inotify-exemplaren is bereikt
- Updates voor Docker-installatiekopieën
Volgende stappen
De Git-opslagplaats met de voorbeeld-app bevat ook documentatie. Zie het README-bestand voor een overzicht van de resources die beschikbaar zijn in de opslagplaats. In het bijzonder leert u hoe u HTTPS implementeert:
ASP.NET Core Docker-afbeeldingen
Voor deze zelfstudie downloadt u een ASP.NET Core-voorbeeld-app en voert u deze uit in Docker-containers. Het voorbeeld werkt met zowel Linux- als Windows-containers.
Het Dockerfile-voorbeeld maakt gebruik van de docker-buildfunctie met meerdere fasen om in verschillende containers te bouwen en uit te voeren. De build- en runcontainers worden gemaakt op basis van images die door Microsoft op Docker Hub worden geleverd.
dotnet/sdkIn het voorbeeld wordt deze afbeelding gebruikt voor het bouwen van de app. De schijfkopie bevat de .NET SDK, inclusief de Command Line Tools (CLI). De image is geoptimaliseerd voor lokale ontwikkeling, foutopsporing en unit tests. De hulpprogramma's die voor ontwikkeling en compilatie zijn geïnstalleerd, maken de afbeelding relatief groot.
dotnet/aspnetIn het voorbeeld wordt deze afbeelding gebruikt voor het uitvoeren van de app. De afbeelding bevat de ASP.NET Core-runtime en -bibliotheken en is geoptimaliseerd voor het draaien van apps in een productieomgeving. Ontworpen voor snelle implementatie en het opstarten van apps, is de installatiekopie relatief klein, zodat netwerkprestaties tussen Docker Registry en Docker-host zijn geoptimaliseerd. Alleen de binaire bestanden en inhoud die nodig zijn om een app uit te voeren, worden gekopieerd naar de container. De inhoud is klaar om te worden uitgevoerd, waardoor het mogelijk is om de snelste tijd van
docker runnaar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.
Vereiste voorwaarden
De voorbeeld-app downloaden
Download het voorbeeld door de .NET Docker-opslagplaats te klonen:
git clone https://github.com/dotnet/dotnet-docker
De app lokaal uitvoeren
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de volgende opdracht uit om de app lokaal te bouwen en uit te voeren:
dotnet runGa naar
http://localhost:<port>in een browser om de app te testen.Druk op Ctrl+C bij de opdrachtprompt om de app te stoppen.
Uitvoeren in een Linux-container of Windows-container
Als u wilt uitvoeren in een Linux-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Linux-containers.
Als u wilt uitvoeren in een Windows-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Windows-containers.
Navigeer naar de map Dockerfile op dotnet-docker/samples/aspnetapp.
Voer de volgende opdrachten uit om het voorbeeld in Docker te bouwen en uit te voeren:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetappDe
buildopdrachtargumenten:- Noem de afbeelding aspnetapp.
- Zoek naar het Dockerfile in de huidige map (let op de punt aan het einde).
De argumenten van het uitvoeren van het commando:
- Wijs een pseudo-TTY toe en houd deze open, zelfs als deze niet is gekoppeld. (Hetzelfde effect als
--interactive --tty.) - Verwijder de container automatisch wanneer deze wordt afgesloten.
- Koppel
<port>op de lokale computer aan poort 8080 in de container. - Geef de container een naam aspnetcore_sample.
- Geef de aspnetapp-afbeelding op.
Ga naar
http://localhost:<port>in een browser om de app te testen.
Handmatig bouwen en implementeren
In sommige scenario's wilt u mogelijk een app implementeren in een container door de assets die nodig zijn tijdens runtime te kopiëren. In deze sectie ziet u hoe u handmatig implementeert.
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de opdracht dotnet publish uit:
dotnet publish -c Release -o publishedDe opdrachtargumenten:
- Bouw de app in de releasemodus (de standaardmodus voor foutopsporing).
- Maak de assets in de gepubliceerde map.
Voer de app uit.
Windows
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Ga naar
http://localhost:<port>om de startpagina te zien.
"Als u de handmatig gepubliceerde app in een Docker-container wilt gebruiken, maakt u een nieuw Dockerfile en gebruikt u de docker build . opdracht om een afbeelding te maken."
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Gebruik het docker images commando om de nieuwe afbeelding te zien.
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In het voorgaande Dockerfile worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de bestanden niet zijn gewijzigd sinds de *.csproj opdracht voor het docker build laatst is uitgevoerd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
Aanvullende bronnen
- Een .NET-app containeriseren met dotnet publish
- Docker build-commando
- Docker-opdracht uitvoeren
- ASP.NET Core Docker-voorbeeld (het voorbeeld dat in deze zelfstudie wordt gebruikt.)
- ASP.NET Core configureren voor gebruik met proxyservers en load balancers
- Werken met Visual Studio Docker Tools
- Foutopsporing met Visual Studio Code
- GC met Docker en kleine containers
- System.IO.IOException: De geconfigureerde gebruikerslimiet (128) op het aantal inotify-exemplaren is bereikt
- Updates voor Docker-installatiekopieën
Volgende stappen
De Git-opslagplaats met de voorbeeld-app bevat ook documentatie. Zie het README-bestand voor een overzicht van de resources die beschikbaar zijn in de opslagplaats. In het bijzonder leert u hoe u HTTPS implementeert:
ASP.NET Core Docker-afbeeldingen
Voor deze zelfstudie downloadt u een ASP.NET Core-voorbeeld-app en voert u deze uit in Docker-containers. Het voorbeeld werkt met zowel Linux- als Windows-containers.
Het Dockerfile-voorbeeld maakt gebruik van de docker-buildfunctie met meerdere fasen om in verschillende containers te bouwen en uit te voeren. De build- en runcontainers worden gemaakt op basis van images die door Microsoft op Docker Hub worden geleverd.
dotnet/sdkIn het voorbeeld wordt deze afbeelding gebruikt voor het bouwen van de app. De schijfkopie bevat de .NET SDK, inclusief de Command Line Tools (CLI). De image is geoptimaliseerd voor lokale ontwikkeling, foutopsporing en unit tests. De hulpprogramma's die voor ontwikkeling en compilatie zijn geïnstalleerd, maken de afbeelding relatief groot.
dotnet/aspnetIn het voorbeeld wordt deze afbeelding gebruikt voor het uitvoeren van de app. De afbeelding bevat de ASP.NET Core-runtime en -bibliotheken en is geoptimaliseerd voor het draaien van apps in een productieomgeving. Ontworpen voor snelle implementatie en het opstarten van apps, is de installatiekopie relatief klein, zodat netwerkprestaties tussen Docker Registry en Docker-host zijn geoptimaliseerd. Alleen de binaire bestanden en inhoud die nodig zijn om een app uit te voeren, worden gekopieerd naar de container. De inhoud is klaar om te worden uitgevoerd, waardoor het mogelijk is om de snelste tijd van
docker runnaar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.
Vereiste voorwaarden
De voorbeeld-app downloaden
Download het voorbeeld door de .NET Docker-opslagplaats te klonen:
git clone https://github.com/dotnet/dotnet-docker
De app lokaal uitvoeren
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de volgende opdracht uit om de app lokaal te bouwen en uit te voeren:
dotnet runGa naar
http://localhost:5000in een browser om de app te testen.Druk op Ctrl+C bij de opdrachtprompt om de app te stoppen.
Uitvoeren in een Linux-container of Windows-container
Als u wilt uitvoeren in een Linux-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Linux-containers.
Als u wilt uitvoeren in een Windows-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Windows-containers.
Navigeer naar de map Dockerfile op dotnet-docker/samples/aspnetapp.
Voer de volgende opdrachten uit om het voorbeeld in Docker te bouwen en uit te voeren:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetappDe
buildopdrachtargumenten:- Noem de afbeelding aspnetapp.
- Zoek naar het Dockerfile in de huidige map (let op de punt aan het einde).
De argumenten van het uitvoeren van het commando:
- Wijs een pseudo-TTY toe en houd deze open, zelfs als deze niet is gekoppeld. (Hetzelfde effect als
--interactive --tty.) - Verwijder de container automatisch wanneer deze wordt afgesloten.
- Wijs poort 5000 op de lokale computer toe aan poort 80 in de container.
- Geef de container een naam aspnetcore_sample.
- Geef de aspnetapp-afbeelding op.
Ga naar
http://localhost:5000in een browser om de app te testen.
Handmatig bouwen en implementeren
In sommige scenario's wilt u mogelijk een app implementeren in een container door de assets die nodig zijn tijdens runtime te kopiëren. In deze sectie ziet u hoe u handmatig implementeert.
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de opdracht dotnet publish uit:
dotnet publish -c Release -o publishedDe opdrachtargumenten:
- Bouw de app in de releasemodus (de standaardmodus voor foutopsporing).
- Maak de assets in de gepubliceerde map.
Voer de app uit.
Windows
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Ga naar
http://localhost:5000om de startpagina te zien.
"Als u de handmatig gepubliceerde app in een Docker-container wilt gebruiken, maakt u een nieuw Dockerfile en gebruikt u de docker build . opdracht om een afbeelding te maken."
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Gebruik het docker images commando om de nieuwe afbeelding te zien.
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In het voorgaande Dockerfile worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de bestanden niet zijn gewijzigd sinds de *.csproj opdracht voor het docker build laatst is uitgevoerd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
Aanvullende bronnen
- Een .NET-app containeriseren met dotnet publish
- Docker build-commando
- Docker-opdracht uitvoeren
- ASP.NET Core Docker-voorbeeld (het voorbeeld dat in deze zelfstudie wordt gebruikt.)
- ASP.NET Core configureren voor gebruik met proxyservers en load balancers
- Werken met Visual Studio Docker Tools
- Foutopsporing met Visual Studio Code
- GC met Docker en kleine containers
- System.IO.IOException: De geconfigureerde gebruikerslimiet (128) op het aantal inotify-exemplaren is bereikt
- Updates voor Docker-installatiekopieën
Volgende stappen
De Git-opslagplaats met de voorbeeld-app bevat ook documentatie. Zie het README-bestand voor een overzicht van de resources die beschikbaar zijn in de opslagplaats. In het bijzonder leert u hoe u HTTPS implementeert:
ASP.NET Core Docker-afbeeldingen
Voor deze zelfstudie downloadt u een ASP.NET Core-voorbeeld-app en voert u deze uit in Docker-containers. Het voorbeeld werkt met zowel Linux- als Windows-containers.
Het Dockerfile-voorbeeld maakt gebruik van de docker-buildfunctie met meerdere fasen om in verschillende containers te bouwen en uit te voeren. De build- en runcontainers worden gemaakt op basis van images die door Microsoft op Docker Hub worden geleverd.
dotnet/sdkIn het voorbeeld wordt deze afbeelding gebruikt voor het bouwen van de app. De schijfkopie bevat de .NET SDK, inclusief de Command Line Tools (CLI). De image is geoptimaliseerd voor lokale ontwikkeling, foutopsporing en unit tests. De hulpprogramma's die voor ontwikkeling en compilatie zijn geïnstalleerd, maken de afbeelding relatief groot.
dotnet/core/sdkIn het voorbeeld wordt deze afbeelding gebruikt voor het bouwen van de app. De afbeelding bevat de .NET Core SDK, die de opdrachtregeltools (CLI) bevat. De image is geoptimaliseerd voor lokale ontwikkeling, foutopsporing en unit tests. De hulpprogramma's die voor ontwikkeling en compilatie zijn geïnstalleerd, maken de afbeelding relatief groot.
dotnet/aspnetIn het voorbeeld wordt deze afbeelding gebruikt voor het uitvoeren van de app. De afbeelding bevat de ASP.NET Core-runtime en -bibliotheken en is geoptimaliseerd voor het draaien van apps in een productieomgeving. Ontworpen voor snelle implementatie en het opstarten van apps, is de installatiekopie relatief klein, zodat netwerkprestaties tussen Docker Registry en Docker-host zijn geoptimaliseerd. Alleen de binaire bestanden en inhoud die nodig zijn om een app uit te voeren, worden gekopieerd naar de container. De inhoud is klaar om te worden uitgevoerd, waardoor het mogelijk is om de snelste tijd van
docker runnaar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.
dotnet/core/aspnetIn het voorbeeld wordt deze afbeelding gebruikt voor het uitvoeren van de app. De afbeelding bevat de ASP.NET Core-runtime en -bibliotheken en is geoptimaliseerd voor het draaien van apps in een productieomgeving. Ontworpen voor snelle implementatie en het opstarten van apps, is de installatiekopie relatief klein, zodat netwerkprestaties tussen Docker Registry en Docker-host zijn geoptimaliseerd. Alleen de binaire bestanden en inhoud die nodig zijn om een app uit te voeren, worden gekopieerd naar de container. De inhoud is klaar om te worden uitgevoerd, waardoor het mogelijk is om de snelste tijd van
docker runnaar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.
Vereiste voorwaarden
De voorbeeld-app downloaden
Download het voorbeeld door de .NET Docker-opslagplaats te klonen:
git clone https://github.com/dotnet/dotnet-docker
De app lokaal uitvoeren
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de volgende opdracht uit om de app lokaal te bouwen en uit te voeren:
dotnet runGa naar
http://localhost:5000in een browser om de app te testen.Druk op Ctrl+C bij de opdrachtprompt om de app te stoppen.
Uitvoeren in een Linux-container of Windows-container
Als u wilt uitvoeren in een Linux-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Linux-containers.
Als u wilt uitvoeren in een Windows-container, klikt u met de rechtermuisknop op het Docker-clientpictogram van het systeemvak en selecteert u overschakelen naar Windows-containers.
Navigeer naar de map Dockerfile op dotnet-docker/samples/aspnetapp.
Voer de volgende opdrachten uit om het voorbeeld in Docker te bouwen en uit te voeren:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetappDe
buildopdrachtargumenten:- Noem de afbeelding aspnetapp.
- Zoek naar het Dockerfile in de huidige map (let op de punt aan het einde).
De argumenten van het uitvoeren van het commando:
- Wijs een pseudo-TTY toe en houd deze open, zelfs als deze niet is gekoppeld. (Hetzelfde effect als
--interactive --tty.) - Verwijder de container automatisch wanneer deze wordt afgesloten.
- Wijs poort 5000 op de lokale computer toe aan poort 80 in de container.
- Geef de container een naam aspnetcore_sample.
- Geef de aspnetapp-afbeelding op.
Ga naar
http://localhost:5000in een browser om de app te testen.
Handmatig bouwen en implementeren
In sommige scenario's wilt u mogelijk een app implementeren in een container door de assets die nodig zijn tijdens runtime te kopiëren. In deze sectie ziet u hoe u handmatig implementeert.
Navigeer naar de projectmap op dotnet-docker/samples/aspnetapp/aspnetapp.
Voer de opdracht dotnet publish uit:
dotnet publish -c Release -o publishedDe opdrachtargumenten:
- Bouw de app in de releasemodus (de standaardmodus voor foutopsporing).
- Maak de assets in de gepubliceerde map.
Voer de app uit.
Windows
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Ga naar
http://localhost:5000om de startpagina te zien.
"Als u de handmatig gepubliceerde app in een Docker-container wilt gebruiken, maakt u een nieuw Dockerfile en gebruikt u de docker build . opdracht om een afbeelding te maken."
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Gebruik het docker images commando om de nieuwe afbeelding te zien.
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Gebruik het docker images commando om de nieuwe afbeelding te zien.
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In het voorgaande Dockerfile worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de bestanden niet zijn gewijzigd sinds de *.csproj opdracht voor het docker build laatst is uitgevoerd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Zoals vermeld in het voorgaande Dockerfile, worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de bestanden niet zijn gewijzigd sinds de *.csproj opdracht voor het docker build laatst is uitgevoerd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Het Dockerfile
Hier volgt het Dockerfile dat wordt gebruikt door de docker build opdracht die u eerder hebt uitgevoerd. Het maakt gebruik dotnet publish op dezelfde manier als u dat in deze sectie hebt gedaan om te bouwen en te implementeren.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
In het voorgaande Dockerfile worden de *.csproj bestanden gekopieerd en hersteld als afzonderlijke lagen. Wanneer de docker build opdracht een image bouwt, maakt het gebruik van een ingebouwde cache. Als de bestanden niet zijn gewijzigd sinds de *.csproj opdracht voor het docker build laatst is uitgevoerd, hoeft de dotnet restore opdracht niet opnieuw te worden uitgevoerd. In plaats daarvan wordt de ingebouwde cache voor de bijbehorende dotnet restore laag opnieuw gebruikt. Voor meer informatie, zie Best practices voor het schrijven van Dockerfiles.
Aanvullende bronnen
- Een .NET-app containeriseren met dotnet publish
- Docker build-commando
- Docker-opdracht uitvoeren
- ASP.NET Core Docker-voorbeeld (het voorbeeld dat in deze zelfstudie wordt gebruikt.)
- ASP.NET Core configureren voor gebruik met proxyservers en load balancers
- Werken met Visual Studio Docker Tools
- Foutopsporing met Visual Studio Code
- GC met Docker en kleine containers
- System.IO.IOException: De geconfigureerde gebruikerslimiet (128) op het aantal inotify-exemplaren is bereikt
Volgende stappen
De Git-opslagplaats met de voorbeeld-app bevat ook documentatie. Zie het README-bestand voor een overzicht van de resources die beschikbaar zijn in de opslagplaats. In het bijzonder leert u hoe u HTTPS implementeert: