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 zawierają użytkownika non-root. Ten użytkownik sprawia, że obrazy mają funkcję non-root. Aby uruchomić jako non-root, dodaj następujący wiersz na końcu pliku Dockerfile (lub podobną instrukcję w manifestach Kubernetes):

USER app

Platforma .NET 8 dodaje zmienną środowiskową dla identyfikatora UID użytkownika non-root, czyli 1654. Ta zmienna środowiskowa jest przydatna w przypadku testu platformy Kubernetes runAsNonRoot, który wymaga ustawienia użytkownika kontenera za pomocą identyfikatora UID, a nie według nazwy. W tym dockerfile przedstawiono 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 ułatwia 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żna uruchomić go jako non-root.

Aby uzyskać więcej informacji, zobacz Domyślny port ASP.NET Core zmieniony z 80 na 8080 i Nowy użytkownik 'app' inny niż 'root' 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 .NET.

Aby uzyskać więcej informacji, zobacz Obrazy kontenerów Debian zaktualizowane do systemu Debian 12.

Odchudzone obrazy Ubuntu

Chiseled obrazy systemu Ubuntu są dostępne dla .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. Dostępne są obrazy extra, które zawierają pakiety icu i tzdata.

Aby uzyskać więcej informacji na temat globalizacji i kontenerów, zobacz aplikacja testowa globalizacji.

Tworzenie obrazów kontenerów wieloplatformowych

Platforma Docker obsługuje używanie i kompilowanie obrazów wieloplatformowych, które działają w wielu środowiskach. Platforma .NET 8 wprowadza nowy wzorzec, który umożliwia łączenie i dopasowywanie architektur z obrazami .NET, które budujesz. Jeśli na przykład używasz systemu macOS i chcesz docelowo używać usługi chmurowej 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 teraz wartości $TARGETARCH i argument -a 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.

Kompozytowe obrazy ASP.NET

W ramach wysiłków na rzecz poprawy wydajności konteneryzacji dostępne są nowe obrazy Docker platformy ASP.NET, które mają skonsolidowaną wersję środowiska uruchomieniowego. Ten składnik jest tworzony przez kompilację wielu zestawów CIL w pojedynczy wynikowy plik binarny przeznaczony do bezpośredniego uruchomienia (R2R). Ponieważ te zestawy są osadzone w jednym obrazie, jitting zajmuje mniej czasu, a wydajność uruchamiania aplikacji się poprawia. Drugą dużą zaletą obrazu złożonego w porównaniu do standardowego 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ż kompozyty mają wiele zestawów zintegrowanych w jednym, mają ściślejsze sprzężenie wersji. Aplikacje nie mogą używać niestandardowych wersji platformy ani plików binarnych ASP.NET.

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

Publikowanie kontenerów

Wartości domyślne wygenerowanego obrazu

dotnet publish może tworzyć obrazy kontenerów. Domyślnie tworzy obrazy non-root, co ułatwia aplikacjom zachowanie bezpieczeństwa domyślnie. Zmień tę wartość domyślną w dowolnym momencie, ustawiając właściwość ContainerUser, na przykład na root.

Domyślny tag kontenera danych wyjściowych jest 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 wynika z przesuwania warstw w jednej operacji, a dla rejestrów, które nie obsługują przesyłania niepodzielnego, zastosowano 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 (zarządzanej tożsamości Azure) podczas przesyłania 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 konteneryzowania aplikacji .NET, zobacz Containerize a .NET app with dotnet publish.

Publikuj do 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, abyś na przykład uruchomił narzędzie do skanowania obrazów przed ich przesłaniem. Po utworzeniu archiwum można go przenieść, zeskanować lub załadować do lokalnego łańcucha narzędzi platformy Docker.

Aby publikować w archiwum, dodaj właściwość ContainerArchiveOutputPath 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ż