GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Testen neuer .NET Core Alpine Docker-Images

Ich habe kürzlich über die Optimierung der Größe von .NET- und ASP.NET-Docker-Dateien gebloggt. .NET Core 2.0 wurde zuvor auf einem Debian-Image erstellt, aber heute gibt es ein Vorschau-Image mit .NET Core 2.1 Nightlies unter Verwendung von Alpine. Die Ankündigung zu diesem neuen Alpine-Vorschaubild können Sie hier nachlesen. Es gibt auch einen guten Rollup-Beitrag zu .NET und Docker.

Sie haben zwei neue Bilder hinzugefügt:

  • 2.1-runtime-alpine
  • 2.1-runtime-deps-alpine

Die Alpine-Unterstützung ist Teil der .NET Core 2.1-Version. .NET Core 2.1-Images werden derzeit im Microsoft/dotnet-nightly-Repository bereitgestellt, einschließlich der neuen Alpine-Images. .NET Core 2.1-Images werden nach der Veröffentlichung im Jahr 2018 in das Microsoft/dotnet-Repo hochgestuft.

HINWEIS:Das Image -runtime-deps- enthält die Abhängigkeiten, die für eine .NET Core-Anwendung benötigt werden, aber NICHT die .NET Core-Laufzeit selbst. Dies ist das Image, das Sie verwenden würden, wenn Ihre App eine eigenständige Anwendung wäre, die eine Kopie der .NET Core-Runtime enthält. Dies sind Apps, die mit -r [Laufzeit-ID] veröffentlicht wurden. Die meisten Benutzer verwenden das Runtime-Image, das die vollständige .NET Core-Runtime enthält. Um es klar zu sagen:

- Die runtime image enthält die .NET Core-Runtime und soll Framework-abhängige bereitgestellte Anwendungen ausführen – siehe Beispiel

- Die runtime-deps image enthält nur die nativen Abhängigkeiten, die von .NET Core benötigt werden, und soll eigenständig bereitgestellte Anwendungen ausführen – siehe Beispiel

Es ist am besten, mit .NET Core mehrstufige Builddateien zu verwenden, sodass Sie einen Container haben, der Ihre App erstellt, und einen, der die Ergebnisse dieses Builds enthält. Auf diese Weise versenden Sie kein Image mit einer Reihe von SDKs und Compilern, die Sie nicht benötigen.

HINWEIS:Lesen Sie dies, um mehr über Image-Versionen in Dockerfiles zu erfahren, damit Sie das richtige Tag und Digest für Ihre Anforderungen auswählen können. Idealerweise wählen Sie eine Docker-Datei aus, die aktualisiert wird, um die neuesten Wartungspatches einzuschließen.

Ausgehend von dieser Docker-Datei bauen wir mit dem SDK-Image, veröffentlichen es dann und das Ergebnis beträgt etwa 219 MB.

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"]

Dann speichere ich dies als Dockerfile.debian und baue so:

> docker build . -t shanselman/dockertestdeb:0.1 -f dockerfile.debian

Bei einer standardmäßigen ASP.NET-App ist dieses Bild am Ende 219 MB groß.

Jetzt ändere ich nur eine Zeile und verwende die 2.1 alpine Runtime

FROM microsoft/dotnet-nightly:2.1-runtime-alpine

Und so bauen:

> docker build . -t shanselman/dockertestalp:0.1 -f dockerfile.alpine

und vergleiche die beiden:

> docker images | find /i "dockertest"
shanselman/dockertestalp 0.1 3f2595a6833d 16 minutes ago 82.8MB
shanselman/dockertestdeb 0.1 0d62455c4944 30 minutes ago 219MB

Nett. Etwa 83 MB statt 219 MB für eine Hello-World-Web-App. Nun die Idee eines Mikro Service ist machbarer!

Bitte besuchen Sie das GitHub-Problem hier https://github.com/dotnet/dotnet-docker-nightly/issues/500 und teilen Sie Ihre Gedanken und Ergebnisse mit, während Sie diese Alpine-Bilder testen. Sind Sie auch an einem "-debian-slim" interessiert? Es wäre auf halbem Weg zu Alpine, aber nicht so schwer wie nur -debian.

Es passieren viele tolle Dinge rund um .NET und Docker. Sehen Sie sich unbedingt auch den Beitrag von Jeff Fritz zum Erstellen eines minimalen ASP.NET Core-Windows-Containers an, um zu sehen, wie Sie (vollständige) Framework-Anwendungen, die auch auf Windows-Containern ausgeführt werden, zerquetschen können. Beispielsweise sind die Windows Nano Server-Images nur 93 MB komprimiert .

Sponsor: Holen Sie sich die neueste JetBrains Rider-Vorschau für .NET Core 2.0-Unterstützung, Wertverfolgung und Aufrufverfolgung, MSTest-Runner, neue Codeinspektionen und Refactorings sowie die Parallel Stacks-Ansicht im Debugger.


Docker
  1. Was ist neu in Docker Compose v2?

  2. So ändern Sie Docker-Images

  3. Einführung in Docker-Images

  4. Erkennen, dass eine .NET Core-App in einem Docker-Container ausgeführt wird, und SkipableFacts in XUnit

  5. Optimieren der Größen von ASP.NET Core Docker-Images

Erstellen, Ausführen und Testen von .NET Core und ASP.NET Core 2.1 in Docker auf einem Raspberry Pi (ARM32)

.NET und Docker

ZEIT jetzt Bereitstellungen von Open-Source-ASP.NET-Core-Web-Apps mit Docker

Erkunden von ASP.NET Core mit Docker in Linux- und Windows-Containern

Testen von .NET Core unter Linux mit nur einem Tarball (ohne apt-get)

Einsteigerleitfaden für die Docker-Welt