J'ai récemment blogué sur l'optimisation de la taille des fichiers Docker .NET et ASP.NET. .NET Core 2.0 était auparavant construit sur une image Debian, mais aujourd'hui, il existe une image d'aperçu avec des nightlies .NET Core 2.1 utilisant Alpine. Vous pouvez lire ici l'annonce de cette nouvelle image d'aperçu Alpine. Il existe également un bon article récapitulatif sur .NET et Docker.
Ils ont ajouté deux nouvelles images :
2.1-runtime-alpine
2.1-runtime-deps-alpine
La prise en charge d'Alpine fait partie de la version .NET Core 2.1. Les images .NET Core 2.1 sont actuellement fournies sur le référentiel microsoft/dotnet-nightly, y compris les nouvelles images Alpine. Les images .NET Core 2.1 seront promues dans le référentiel microsoft/dotnet lors de leur sortie en 2018.
REMARQUE :L'image -runtime-deps- contient les dépendances nécessaires pour une application .NET Core, mais PAS le runtime .NET Core lui-même. Il s'agit de l'image que vous utiliseriez si votre application était une application autonome incluant une copie du runtime .NET Core. Il s'agit d'applications publiées avec -r [runtimeid]. La plupart des gens utiliseront l'image -runtime- qui incluait le runtime complet de .NET Core. Pour être clair :
- Le
runtime
l'image contient le runtime .NET Core et est destinée à exécuter des applications déployées dépendantes du framework - voir l'exemple- Le
runtime-deps
l'image contient uniquement les dépendances natives nécessaires à .NET Core et est destinée à exécuter des applications déployées autonomes - voir l'exemple
Il est préférable avec .NET Core d'utiliser des fichiers de génération en plusieurs étapes, de sorte que vous disposez d'un conteneur qui génère votre application et d'un autre qui contient les résultats de cette génération. De cette façon, vous ne finissez pas par envoyer une image avec un tas de SDK et de compilateurs dont vous n'avez pas besoin.
REMARQUE :Lisez ceci pour en savoir plus sur les versions d'image dans Dockerfiles afin de pouvoir choisir la bonne balise et le bon résumé pour vos besoins. Idéalement, vous choisirez un fichier Docker qui s'appliquera pour inclure les derniers correctifs de maintenance.
Étant donné ce fichier docker, nous construisons avec l'image SDK, puis publions, et le résultat est d'environ 219 Mo.
FROM microsoft/dotnet:2.0-sdk as builder
RUN mkdir -p /root/src/app/dockertest
WORKDIR /root/src/app/dockertest
COPY dockertest.csproj .
RUN dotnet restore ./dockertest.csproj
COPY . .
RUN dotnet publish -c release -o published
FROM microsoft/dotnet:2.0.0-runtime
WORKDIR /root/
COPY --from=builder /root/src/app/dockertest/published .
ENV ASPNETCORE_URLS=http://+:5000
EXPOSE 5000/tcp
CMD ["dotnet", "./dockertest.dll"]
Ensuite, je vais l'enregistrer sous Dockerfile.debian et le construire comme ceci :
> docker build . -t shanselman/dockertestdeb:0.1 -f dockerfile.debian
Avec une application ASP.NET standard, cette image finit par faire 219 Mo.
Maintenant, je vais juste changer une ligne et utiliser le runtime alpin 2.1
FROM microsoft/dotnet-nightly:2.1-runtime-alpine
Et construisez comme ceci :
> docker build . -t shanselman/dockertestalp:0.1 -f dockerfile.alpine
et comparez les deux :
> docker images | find /i "dockertest"
shanselman/dockertestalp 0.1 3f2595a6833d 16 minutes ago 82.8MB
shanselman/dockertestdeb 0.1 0d62455c4944 30 minutes ago 219MB
Agréable. Environ 83 Mo maintenant plutôt que 219 Mo pour une application Web Hello World. Maintenant l'idée d'un micro le service est plus faisable !
Veuillez vous rendre sur le problème GitHub ici https://github.com/dotnet/dotnet-docker-nightly/issues/500 et faire part de vos réflexions et résultats lorsque vous testez ces images alpines. Aussi, êtes-vous intéressé par un "-debian-slim?" Ce serait à mi-chemin d'Alpine mais pas aussi lourd que juste -debian.
Beaucoup de choses intéressantes se passent autour de .NET et Docker. Assurez-vous également de consulter l'article de Jeff Fritz sur la création d'un conteneur Windows ASP.NET Core minimal pour voir comment vous pouvez également écraser les applications Framework .(full) exécutées sur des conteneurs Windows. Par exemple, les images Windows Nano Server ne sont compressées qu'à 93 Mo .
Parrain : Obtenez le dernier aperçu de JetBrains Rider pour la prise en charge de .NET Core 2.0, le suivi des valeurs et le suivi des appels, l'exécuteur MSTest, les nouvelles inspections et refactorisations de code, et la vue Piles parallèles dans le débogueur.