Héberger ASP.NET Core dans des conteneurs Docker
Remarque
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 9 de cet article.
Avertissement
Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la stratégie de support .NET et .NET Core. Pour la version actuelle, consultez la version .NET 9 de cet article.
Important
Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.
Pour la version actuelle, consultez la version .NET 9 de cet article.
Cet article explique comment exécuter une application ASP.NET Core dans des conteneurs Docker.
Windows Edition Home ne prend pas en charge Hyper-V, et Hyper-V est nécessaire pour Docker.
Consultez Conteneuriser une application .NET avec dotnet publish pour plus d’informations sur une application .NET conteneurisée avec dotnet publish
.
Images Docker ASP.NET Core
Dans ce tutoriel, vous allez télécharger un exemple d’application ASP.NET Core pour l’exécuter dans des conteneurs Docker. L’exemple s’applique aux conteneurs Linux et Windows.
L’exemple de fichier Dockerfile utilise la fonctionnalité de build en plusieurs étapes de Docker pour séparer le build et l’exécution dans différents conteneurs. Les conteneurs de build et d’exécution sont créés à partir d’images fournies par Microsoft dans Docker Hub :
dotnet/sdk
L’exemple utilise cette image pour créer l’application. Elle contient le kit SDK .NET, qui inclut les outils en ligne de commande. Elle est optimisée pour le développement, le débogage et le test unitaire en local. Les outils installés pour le développement et la compilation rendent l’image relativement grande.
dotnet/aspnet
L’exemple utilise cette image pour exécuter l’application. Elle contient le runtime ASP.NET Core et les bibliothèques. Elle est optimisée pour l’exécution d’applications en production. Conçue pour la vitesse de déploiement et de démarrage de l’application, elle est relativement petite afin d’optimiser les performances réseau du Registre Docker vers l’hôte Docker. Seuls les binaires et le contenu nécessaires pour exécuter une application sont copiés dans le conteneur. Le contenu est prêt à s’exécuter, ce qui réduit le délai entre
docker run
et le démarrage de l’application. La compilation de code dynamique n’est pas nécessaire dans le modèle Docker.
Prérequis
Client Docker 18.03 ou version ultérieure
Télécharger l’exemple d’application
Téléchargez l’échantillon en clonant le référentiel Docker .NET :
git clone https://github.com/dotnet/dotnet-docker
Exécutez l’application localement.
Accédez au dossier de projet à l’adresse dotnet-docker/samples/aspnetapp/aspnetapp.
Exécutez la commande suivante pour générer et exécuter l’application localement :
dotnet run
Accédez à
http://localhost:<port>
dans un navigateur pour tester l’application.Appuyez sur Ctrl+C dans l’invite de commande pour arrêter l’application.
Exécuter dans un conteneur Linux ou un conteneur Windows
Pour exécuter dans un conteneur Linux, cliquez avec le bouton droit sur l’icône client Docker de la barre d’état système, puis sélectionnez Basculer vers les conteneurs Linux.
Pour exécuter dans un conteneur Windows, cliquez avec le bouton droit sur l’icône du client Docker de la barre d’état système et sélectionnez Basculer vers les conteneurs Windows.
Accédez au dossier Dockerfile à l’adresse dotnet-docker/samples/aspnetapp.
Exécutez les commandes suivantes pour générer et exécuter l’exemple dans Docker :
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Voici le rôle des arguments de la commande
build
:- nommer l’image aspnetapp ;
- rechercher le fichier Dockerfile dans le dossier actif (le point final).
Voici le rôle des arguments de la commande run :
- allouer un pseudoterminal TTY et le laisser ouvert même s’il n’est pas attaché (même effet que
--interactive --tty
) ; - supprimer automatiquement le conteneur lorsqu’il se ferme ;
- Mappez
<port>
sur la machine locale avec le port 8080 dans le conteneur. - nommer le conteneur aspnetcore_sample ;
- spécifier l’image aspnetapp.
Accédez à
http://localhost:<port>
dans un navigateur pour tester l’application.
Effectuer manuellement le build et le déploiement
Dans certains scénarios, il peut être intéressant de déployer une application sur un conteneur en y copiant ses composants nécessaires à l’exécution. Cette section montre comment effectuer un déploiement manuel.
Accédez au dossier de projet à l’adresse dotnet-docker/samples/aspnetapp/aspnetapp.
Exécutez la commande dotnet publish :
dotnet publish -c Release -o published
Voici le rôle des arguments de la commande :
- Générez l’application en mode version finale (la valeur par défaut est le mode débogage).
- Créez les ressources dans le dossier publié.
Exécutez l’application.
Windows :
dotnet published\aspnetapp.dll
Linux :
dotnet published/aspnetapp.dll
Accédez à
http://localhost:<port>
pour afficher la page home.
Pour utiliser l’application publiée manuellement dans un conteneur Docker, créez un nouveau fichier Dockerfile et utilisez la commande docker build .
pour générer une image.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Pour afficher la nouvelle image, utilisez la commande docker images
.
Le fichier Dockerfile
Voici le fichier Dockerfile utilisé par la commande docker build
que nous avons exécutée tout à l’heure. Il utilise dotnet publish
comme nous l’avons fait dans cette section pour le build et le déploiement.
# 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"]
Dans le fichier Dockerfile précédent, les fichiers *.csproj
sont copiés et restaurés en tant que couches distinctes. Lorsque la commande docker build
génère une image, elle utilise un cache intégré. Si les fichiers *.csproj
n’ont pas changé depuis la dernière exécution de la commande docker build
, la commande dotnet restore
n’a pas besoin de s’exécuter à nouveau. Au lieu de cela, le cache intégré pour la couche correspondante dotnet restore
est réutilisé. Pour plus d’informations, consultez Meilleures pratiques pour l’écriture de fichiers Dockerfiles.
Ressources supplémentaires
- Conteneuriser une application .NET avec dotnet publish
- Commande docker build
- Commande docker run
- Exemple Docker ASP.NET Core (utilisé dans ce tutoriel)
- Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge
- Utilisation des outils Docker dans Visual Studio
- Débogage avec Visual Studio Code
- GC utilisant Docker et de petits conteneurs
- System.IO.IOException : la limite d’utilisateurs configurée (128) sur le nombre d’instances d’inotify a été atteinte
- Mises à jour des images Docker
Étapes suivantes
Le référentiel Git qui contient l’exemple d’application comporte également une documentation. Pour une vue d’ensemble des ressources disponibles dans le référentiel, voir le fichier Lisez-moi. En particulier, découvrez comment implémenter le protocole HTTPS :
Images Docker ASP.NET Core
Dans ce tutoriel, vous allez télécharger un exemple d’application ASP.NET Core pour l’exécuter dans des conteneurs Docker. L’exemple s’applique aux conteneurs Linux et Windows.
L’exemple de fichier Dockerfile utilise la fonctionnalité de build en plusieurs étapes de Docker pour séparer le build et l’exécution dans différents conteneurs. Les conteneurs de build et d’exécution sont créés à partir d’images fournies par Microsoft dans Docker Hub :
dotnet/sdk
L’exemple utilise cette image pour créer l’application. Elle contient le kit SDK .NET, qui inclut les outils en ligne de commande. Elle est optimisée pour le développement, le débogage et le test unitaire en local. Les outils installés pour le développement et la compilation rendent l’image relativement grande.
dotnet/aspnet
L’exemple utilise cette image pour exécuter l’application. Elle contient le runtime ASP.NET Core et les bibliothèques. Elle est optimisée pour l’exécution d’applications en production. Conçue pour la vitesse de déploiement et de démarrage de l’application, elle est relativement petite afin d’optimiser les performances réseau du Registre Docker vers l’hôte Docker. Seuls les binaires et le contenu nécessaires pour exécuter une application sont copiés dans le conteneur. Le contenu est prêt à s’exécuter, ce qui réduit le délai entre
docker run
et le démarrage de l’application. La compilation de code dynamique n’est pas nécessaire dans le modèle Docker.
Prérequis
Client Docker 18.03 ou version ultérieure
Télécharger l’exemple d’application
Téléchargez l’échantillon en clonant le référentiel Docker .NET :
git clone https://github.com/dotnet/dotnet-docker
Exécutez l’application localement.
Accédez au dossier de projet à l’adresse dotnet-docker/samples/aspnetapp/aspnetapp.
Exécutez la commande suivante pour générer et exécuter l’application localement :
dotnet run
Accédez à
http://localhost:5000
dans un navigateur pour tester l’application.Appuyez sur Ctrl+C dans l’invite de commande pour arrêter l’application.
Exécuter dans un conteneur Linux ou un conteneur Windows
Pour exécuter dans un conteneur Linux, cliquez avec le bouton droit sur l’icône client Docker de la barre d’état système, puis sélectionnez Basculer vers les conteneurs Linux.
Pour exécuter dans un conteneur Windows, cliquez avec le bouton droit sur l’icône du client Docker de la barre d’état système et sélectionnez Basculer vers les conteneurs Windows.
Accédez au dossier Dockerfile à l’adresse dotnet-docker/samples/aspnetapp.
Exécutez les commandes suivantes pour générer et exécuter l’exemple dans Docker :
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Voici le rôle des arguments de la commande
build
:- nommer l’image aspnetapp ;
- rechercher le fichier Dockerfile dans le dossier actif (le point final).
Voici le rôle des arguments de la commande run :
- allouer un pseudoterminal TTY et le laisser ouvert même s’il n’est pas attaché (même effet que
--interactive --tty
) ; - supprimer automatiquement le conteneur lorsqu’il se ferme ;
- mapper le port 5000 de l’ordinateur local avec le port 80 du conteneur ;
- nommer le conteneur aspnetcore_sample ;
- spécifier l’image aspnetapp.
Accédez à
http://localhost:5000
dans un navigateur pour tester l’application.
Effectuer manuellement le build et le déploiement
Dans certains scénarios, il peut être intéressant de déployer une application sur un conteneur en y copiant ses composants nécessaires à l’exécution. Cette section montre comment effectuer un déploiement manuel.
Accédez au dossier de projet à l’adresse dotnet-docker/samples/aspnetapp/aspnetapp.
Exécutez la commande dotnet publish :
dotnet publish -c Release -o published
Voici le rôle des arguments de la commande :
- Générez l’application en mode version finale (la valeur par défaut est le mode débogage).
- Créez les ressources dans le dossier publié.
Exécutez l’application.
Windows :
dotnet published\aspnetapp.dll
Linux :
dotnet published/aspnetapp.dll
Accédez à
http://localhost:5000
pour afficher la page home.
Pour utiliser l’application publiée manuellement dans un conteneur Docker, créez un nouveau fichier Dockerfile et utilisez la commande docker build .
pour générer une image.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Pour afficher la nouvelle image, utilisez la commande docker images
.
Le fichier Dockerfile
Voici le fichier Dockerfile utilisé par la commande docker build
que nous avons exécutée tout à l’heure. Il utilise dotnet publish
comme nous l’avons fait dans cette section pour le build et le déploiement.
# 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"]
Dans le fichier Dockerfile précédent, les fichiers *.csproj
sont copiés et restaurés en tant que couches distinctes. Lorsque la commande docker build
génère une image, elle utilise un cache intégré. Si les fichiers *.csproj
n’ont pas changé depuis la dernière exécution de la commande docker build
, la commande dotnet restore
n’a pas besoin de s’exécuter à nouveau. Au lieu de cela, le cache intégré pour la couche correspondante dotnet restore
est réutilisé. Pour plus d’informations, consultez Meilleures pratiques pour l’écriture de fichiers Dockerfiles.
Ressources supplémentaires
- Conteneuriser une application .NET avec dotnet publish
- Commande docker build
- Commande docker run
- Exemple Docker ASP.NET Core (utilisé dans ce tutoriel)
- Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge
- Utilisation des outils Docker dans Visual Studio
- Débogage avec Visual Studio Code
- GC utilisant Docker et de petits conteneurs
- System.IO.IOException : la limite d’utilisateurs configurée (128) sur le nombre d’instances d’inotify a été atteinte
- Mises à jour des images Docker
Étapes suivantes
Le référentiel Git qui contient l’exemple d’application comporte également une documentation. Pour une vue d’ensemble des ressources disponibles dans le référentiel, voir le fichier Lisez-moi. En particulier, découvrez comment implémenter le protocole HTTPS :
Images Docker ASP.NET Core
Dans ce tutoriel, vous allez télécharger un exemple d’application ASP.NET Core pour l’exécuter dans des conteneurs Docker. L’exemple s’applique aux conteneurs Linux et Windows.
L’exemple de fichier Dockerfile utilise la fonctionnalité de build en plusieurs étapes de Docker pour séparer le build et l’exécution dans différents conteneurs. Les conteneurs de build et d’exécution sont créés à partir d’images fournies par Microsoft dans Docker Hub :
dotnet/sdk
L’exemple utilise cette image pour créer l’application. Elle contient le kit SDK .NET, qui inclut les outils en ligne de commande. Elle est optimisée pour le développement, le débogage et le test unitaire en local. Les outils installés pour le développement et la compilation rendent l’image relativement grande.
dotnet/core/sdk
L’exemple utilise cette image pour créer l’application. Elle contient le Kit SDK .NET Core, qui inclut les outils en ligne de commande. Elle est optimisée pour le développement, le débogage et le test unitaire en local. Les outils installés pour le développement et la compilation rendent l’image relativement grande.
dotnet/aspnet
L’exemple utilise cette image pour exécuter l’application. Elle contient le runtime ASP.NET Core et les bibliothèques. Elle est optimisée pour l’exécution d’applications en production. Conçue pour la vitesse de déploiement et de démarrage de l’application, elle est relativement petite afin d’optimiser les performances réseau du Registre Docker vers l’hôte Docker. Seuls les binaires et le contenu nécessaires pour exécuter une application sont copiés dans le conteneur. Le contenu est prêt à s’exécuter, ce qui réduit le délai entre
docker run
et le démarrage de l’application. La compilation de code dynamique n’est pas nécessaire dans le modèle Docker.
dotnet/core/aspnet
L’exemple utilise cette image pour exécuter l’application. Elle contient le runtime ASP.NET Core et les bibliothèques. Elle est optimisée pour l’exécution d’applications en production. Conçue pour la vitesse de déploiement et de démarrage de l’application, elle est relativement petite afin d’optimiser les performances réseau du Registre Docker vers l’hôte Docker. Seuls les binaires et le contenu nécessaires pour exécuter une application sont copiés dans le conteneur. Le contenu est prêt à s’exécuter, ce qui réduit le délai entre
docker run
et le démarrage de l’application. La compilation de code dynamique n’est pas nécessaire dans le modèle Docker.
Prérequis
Client Docker 18.03 ou version ultérieure
Télécharger l’exemple d’application
Téléchargez l’échantillon en clonant le référentiel Docker .NET :
git clone https://github.com/dotnet/dotnet-docker
Exécutez l’application localement.
Accédez au dossier de projet à l’adresse dotnet-docker/samples/aspnetapp/aspnetapp.
Exécutez la commande suivante pour générer et exécuter l’application localement :
dotnet run
Accédez à
http://localhost:5000
dans un navigateur pour tester l’application.Appuyez sur Ctrl+C dans l’invite de commande pour arrêter l’application.
Exécuter dans un conteneur Linux ou un conteneur Windows
Pour exécuter dans un conteneur Linux, cliquez avec le bouton droit sur l’icône client Docker de la barre d’état système, puis sélectionnez Basculer vers les conteneurs Linux.
Pour exécuter dans un conteneur Windows, cliquez avec le bouton droit sur l’icône du client Docker de la barre d’état système et sélectionnez Basculer vers les conteneurs Windows.
Accédez au dossier Dockerfile à l’adresse dotnet-docker/samples/aspnetapp.
Exécutez les commandes suivantes pour générer et exécuter l’exemple dans Docker :
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Voici le rôle des arguments de la commande
build
:- nommer l’image aspnetapp ;
- rechercher le fichier Dockerfile dans le dossier actif (le point final).
Voici le rôle des arguments de la commande run :
- allouer un pseudoterminal TTY et le laisser ouvert même s’il n’est pas attaché (même effet que
--interactive --tty
) ; - supprimer automatiquement le conteneur lorsqu’il se ferme ;
- mapper le port 5000 de l’ordinateur local avec le port 80 du conteneur ;
- nommer le conteneur aspnetcore_sample ;
- spécifier l’image aspnetapp.
Accédez à
http://localhost:5000
dans un navigateur pour tester l’application.
Effectuer manuellement le build et le déploiement
Dans certains scénarios, il peut être intéressant de déployer une application sur un conteneur en y copiant ses composants nécessaires à l’exécution. Cette section montre comment effectuer un déploiement manuel.
Accédez au dossier de projet à l’adresse dotnet-docker/samples/aspnetapp/aspnetapp.
Exécutez la commande dotnet publish :
dotnet publish -c Release -o published
Voici le rôle des arguments de la commande :
- Générez l’application en mode version finale (la valeur par défaut est le mode débogage).
- Créez les ressources dans le dossier publié.
Exécutez l’application.
Windows :
dotnet published\aspnetapp.dll
Linux :
dotnet published/aspnetapp.dll
Accédez à
http://localhost:5000
pour afficher la page home.
Pour utiliser l’application publiée manuellement dans un conteneur Docker, créez un nouveau fichier Dockerfile et utilisez la commande docker build .
pour générer une image.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Pour afficher la nouvelle image, utilisez la commande docker images
.
Le fichier Dockerfile
Voici le fichier Dockerfile utilisé par la commande docker build
que nous avons exécutée tout à l’heure. Il utilise dotnet publish
comme nous l’avons fait dans cette section pour le build et le déploiement.
# 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"]
Pour afficher la nouvelle image, utilisez la commande docker images
.
Le fichier Dockerfile
Voici le fichier Dockerfile utilisé par la commande docker build
que nous avons exécutée tout à l’heure. Il utilise dotnet publish
comme nous l’avons fait dans cette section pour le build et le déploiement.
# 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"]
Dans le fichier Dockerfile précédent, les fichiers *.csproj
sont copiés et restaurés en tant que couches distinctes. Lorsque la commande docker build
génère une image, elle utilise un cache intégré. Si les fichiers *.csproj
n’ont pas changé depuis la dernière exécution de la commande docker build
, la commande dotnet restore
n’a pas besoin de s’exécuter à nouveau. Au lieu de cela, le cache intégré pour la couche correspondante dotnet restore
est réutilisé. Pour plus d’informations, consultez Meilleures pratiques pour l’écriture de fichiers Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Le fichier Dockerfile
Voici le fichier Dockerfile utilisé par la commande docker build
que nous avons exécutée tout à l’heure. Il utilise dotnet publish
comme nous l’avons fait dans cette section pour le build et le déploiement.
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"]
Comme indiqué dans le fichier Dockerfile précédent, les fichiers *.csproj
sont copiés et restaurés en tant que couches distinctes. Lorsque la commande docker build
génère une image, elle utilise un cache intégré. Si les fichiers *.csproj
n’ont pas changé depuis la dernière exécution de la commande docker build
, la commande dotnet restore
n’a pas besoin de s’exécuter à nouveau. Au lieu de cela, le cache intégré pour la couche correspondante dotnet restore
est réutilisé. Pour plus d’informations, consultez Meilleures pratiques pour l’écriture de fichiers Dockerfiles.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Le fichier Dockerfile
Voici le fichier Dockerfile utilisé par la commande docker build
que nous avons exécutée tout à l’heure. Il utilise dotnet publish
comme nous l’avons fait dans cette section pour le build et le déploiement.
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"]
Dans le fichier Dockerfile précédent, les fichiers *.csproj
sont copiés et restaurés en tant que couches distinctes. Lorsque la commande docker build
génère une image, elle utilise un cache intégré. Si les fichiers *.csproj
n’ont pas changé depuis la dernière exécution de la commande docker build
, la commande dotnet restore
n’a pas besoin de s’exécuter à nouveau. Au lieu de cela, le cache intégré pour la couche correspondante dotnet restore
est réutilisé. Pour plus d’informations, consultez Meilleures pratiques pour l’écriture de fichiers Dockerfiles.
Ressources supplémentaires
- Conteneuriser une application .NET avec dotnet publish
- Commande docker build
- Commande docker run
- Exemple Docker ASP.NET Core (utilisé dans ce tutoriel)
- Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge
- Utilisation des outils Docker dans Visual Studio
- Débogage avec Visual Studio Code
- GC utilisant Docker et de petits conteneurs
- System.IO.IOException : la limite d’utilisateurs configurée (128) sur le nombre d’instances d’inotify a été atteinte
Étapes suivantes
Le référentiel Git qui contient l’exemple d’application comporte également une documentation. Pour une vue d’ensemble des ressources disponibles dans le référentiel, voir le fichier Lisez-moi. En particulier, découvrez comment implémenter le protocole HTTPS :