GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Essayer de nouvelles images Docker Alpine .NET Core

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.


Docker
  1. Quoi de neuf dans Docker Compose v2 ?

  2. Comment modifier les images Docker

  3. Présentation des images Docker

  4. Détecter qu'une application .NET Core est en cours d'exécution dans un conteneur Docker et SkippableFacts dans XUnit

  5. Optimisation des tailles d'image Docker ASP.NET Core

Création, exécution et test de .NET Core et ASP.NET Core 2.1 dans Docker sur un Raspberry Pi (ARM32)

.NET et Docker

ZEIT déploie désormais des applications Web open source ASP.NET Core avec Docker

Explorer ASP.NET Core avec Docker dans les conteneurs Linux et Windows

Essayer .NET Core sur Linux avec juste une archive tar (sans apt-get)

Guide du débutant sur le monde Docker