Delen via


Een ASP.NET Core-app uitvoeren in Docker-containers

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/sdk

    In 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/aspnet

    In 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 run naar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.

Vereiste voorwaarden

De voorbeeld-app downloaden

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 run
    
  • Ga 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 aspnetapp
    

    De build opdrachtargumenten:

    • 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 published
    

    De 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.dll
      
    • Linux:

      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

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/sdk

    In 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/aspnet

    In 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 run naar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.

Vereiste voorwaarden

De voorbeeld-app downloaden

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 run
    
  • Ga 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 aspnetapp
    

    De build opdrachtargumenten:

    • 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 published
    

    De 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.dll
      
    • Linux:

      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

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/sdk

    In 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/aspnet

    In 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 run naar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.

Vereiste voorwaarden

De voorbeeld-app downloaden

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 run
    
  • Ga 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 aspnetapp
    

    De build opdrachtargumenten:

    • 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 published
    

    De 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.dll
      
    • Linux:

      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

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/sdk

    In 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/aspnet

    In 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 run naar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.

Vereiste voorwaarden

De voorbeeld-app downloaden

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 run
    
  • Ga naar http://localhost:5000 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 5000:80 --name aspnetcore_sample aspnetapp
    

    De build opdrachtargumenten:

    • 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:5000 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 published
    

    De 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.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Ga naar http://localhost:5000 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: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

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/sdk

    In 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/sdk

    In 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/aspnet

    In 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 run naar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.

  • dotnet/core/aspnet

    In 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 run naar het opstarten van de app te bereiken. Dynamische codecompilatie is niet nodig in het Docker-model.

Vereiste voorwaarden

De voorbeeld-app downloaden

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 run
    
  • Ga naar http://localhost:5000 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 5000:80 --name aspnetcore_sample aspnetapp
    

    De build opdrachtargumenten:

    • 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:5000 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 published
    

    De 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.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Ga naar http://localhost:5000 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: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

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: