Udostępnij za pośrednictwem


Co nowego w kontenerach dla platformy .NET 8

W tym artykule opisano nowe funkcje w kontenerach dla platformy .NET 8.

Obrazy kontenerów

Następujące zmiany zostały wprowadzone do obrazów kontenerów platformy .NET dla platformy .NET 8:

Użytkownik niebędący użytkownikiem głównym

Obrazy obejmują non-root użytkownika. Ten użytkownik umożliwia wykonanie obrazów non-root . Aby uruchomić polecenie jako non-root, dodaj następujący wiersz na końcu pliku Dockerfile (lub podobną instrukcję w manifestach platformy Kubernetes):

USER app

Platforma .NET 8 dodaje zmienną środowiskową dla identyfikatora UID non-root użytkownika, czyli 64198. Ta zmienna środowiskowa jest przydatna w przypadku testu kubernetes runAsNonRoot , który wymaga ustawienia użytkownika kontenera za pomocą identyfikatora UID, a nie nazwy. Ten plik dockerfile przedstawia przykładowe użycie.

Port domyślny został również zmieniony z portu 80 na 8080. Aby zapewnić obsługę tej zmiany, dostępna jest nowa zmienna środowiskowa ASPNETCORE_HTTP_PORTS , aby ułatwić zmianę portów. Zmienna akceptuje listę portów, która jest prostsza niż format wymagany przez ASPNETCORE_URLS. Jeśli zmienisz port z powrotem na port 80 przy użyciu jednej z tych zmiennych, nie możesz uruchomić polecenia jako non-root.

Aby uzyskać więcej informacji, zobacz Domyślny port ASP.NET Core zmieniony z 80 na 8080 i Nowy użytkownik inny niż główny "aplikacja" na obrazach systemu Linux.

Debian 12

Obrazy kontenerów używają teraz Debian 12 (Bookworm). Debian to domyślna dystrybucja systemu Linux w obrazach kontenerów platformy .NET.

Aby uzyskać więcej informacji, zobacz Debian container images upgrade to Debian 12 (Obrazy kontenerów Debian uaktualnione do systemu Debian 12).

Chiseled Obrazy z systemem Ubuntu

Obrazy z systemem Ubuntu są dostępne dla platformy .NET 8. Wykreślane obrazy mają zmniejszoną powierzchnię zaatakowaną, ponieważ są bardzo małe, nie mają menedżera pakietów ani powłoki i są .non-root Ten typ obrazu jest przeznaczony dla deweloperów, którzy chcą korzystać z obliczeń w stylu urządzenia.

Domyślnie rozdrobnione obrazy nie obsługują globalizacji. extra udostępniane są obrazy, które zawierają icu i tzdata pakiety.

Aby uzyskać więcej informacji na temat globalizacji i kontenerów, zobacz Globalization Test App (Aplikacja testowa globalizacji).

Tworzenie obrazów kontenerów wieloplatformowych

Platforma Docker obsługuje używanie i tworzenie obrazów wieloplatformowych, które działają w wielu środowiskach. Platforma .NET 8 wprowadza nowy wzorzec, który umożliwia mieszanie i dopasowywanie architektur z kompilowanym obrazami platformy .NET. Jeśli na przykład używasz systemu macOS i chcesz kierować usługę w chmurze x64 na platformie Azure, możesz skompilować obraz przy użyciu przełącznika --platform w następujący sposób:

docker build --pull -t app --platform linux/amd64

Zestaw .NET SDK obsługuje $TARGETARCH teraz wartości i -a argument podczas przywracania. Poniższy fragment kodu przedstawia przykład:

RUN dotnet restore -a $TARGETARCH

# Copy everything else and build app.
COPY aspnetapp/. .
RUN dotnet publish -a $TARGETARCH --self-contained false --no-restore -o /app

Aby uzyskać więcej informacji, zobacz wpis w blogu Ulepszanie obsługi kontenerów wieloplatformowych.

ASP.NET obrazów złożonych

W ramach wysiłku mającego na celu poprawę wydajności konteneryzacji dostępne są nowe obrazy platformy Docker ASP.NET, które mają złożoną wersję środowiska uruchomieniowego. Ten złożony jest kompilowany przez kompilowanie wielu zestawów MSIL w jeden wyjściowy plik binarny gotowy do uruchomienia (R2R). Ponieważ te zestawy są osadzone w jednym obrazie, jitting zajmuje mniej czasu, a wydajność uruchamiania aplikacji się poprawia. Drugą dużą zaletą złożonego obrazu ASP.NET jest to, że obrazy złożone mają mniejszy rozmiar na dysku.

Istnieje zastrzeżenie, o których należy pamiętać. Ponieważ złożone mają wiele zestawów osadzonych w jednym, mają mocniejsze sprzęganie wersji. Aplikacje nie mogą używać niestandardowych wersji platformy ani plików binarnych ASP.NET.

Obrazy złożone są dostępne dla platform Alpine Linux, Ubuntu ("jammy") Chiseled i Mariner Distroless z mcr.microsoft.com/dotnet/aspnet repozytorium. Tagi są wyświetlane z sufiksem -compositena stronie platformy Docker ASP.NET.

Publikowanie kontenerów

Wartości domyślne wygenerowanego obrazu

dotnet publish umożliwia tworzenie obrazów kontenerów. Domyślnie tworzy non-root obrazy, co pomaga aplikacjom zachować bezpieczeństwo domyślnie. Zmień tę wartość domyślną ContainerUser w dowolnym momencie, ustawiając odpowiednią wartość, na przykład na root.

Domyślny tag kontenera wyjściowego to teraz latest. Ta wartość domyślna jest zgodna z innymi narzędziami w przestrzeni kontenerów i ułatwia korzystanie z kontenerów w pętli programowania wewnętrznego.

Wydajność i zgodność

Platforma .NET 8 ma zwiększoną wydajność wypychania kontenerów do rejestrów zdalnych, zwłaszcza rejestrów platformy Azure. Przyspieszenie pochodzi z wypychania warstw w jednej operacji i w przypadku rejestrów, które nie obsługują przekazywania niepodzielnego, bardziej niezawodny mechanizm fragmentowania.

Te ulepszenia oznaczają również, że obsługiwane są więcej rejestrów: Harbor, Artifactory, Quay.io i Podman.

Uwierzytelnianie

Platforma .NET 8 dodaje obsługę uwierzytelniania wymiany tokenów OAuth (tożsamości zarządzanej platformy Azure) podczas wypychania kontenerów do rejestrów. Ta obsługa oznacza, że można teraz wypychać do rejestrów, takich jak usługa Azure Container Registry bez żadnych błędów uwierzytelniania. Następujące polecenia pokazują przykładowy przepływ publikowania:

> az acr login -n <your registry name>
> dotnet publish -r linux-x64 -p PublishProfile=DefaultContainer

Aby uzyskać więcej informacji na temat konteneryzacji aplikacji platformy .NET, zobacz Containerize a .NET app with dotnet publish (Konteneryzowanie aplikacji platformy .NET za pomocą polecenia dotnet publish).

Publikowanie w archiwum tar.gz

Począwszy od platformy .NET 8, można utworzyć kontener bezpośrednio jako archiwum tar.gz . Ta funkcja jest przydatna, jeśli przepływ pracy nie jest prosty i wymaga na przykład uruchomienia narzędzia do skanowania obrazów przed ich wypchnięciem. Po utworzeniu archiwum można go przenieść, zeskanować lub załadować do lokalnego łańcucha narzędzi platformy Docker.

Aby opublikować w archiwum, dodaj ContainerArchiveOutputPath właściwość do polecenia dotnet publish , na przykład:

dotnet publish \
  -p PublishProfile=DefaultContainer \
  -p ContainerArchiveOutputPath=./images/sdk-container-demo.tar.gz

Możesz określić nazwę folderu lub ścieżkę o określonej nazwie pliku.

Zobacz też