Wprowadzenie do platform .NET i Docker
Kontenery to jeden z najpopularniejszych sposobów wdrażania i hostowania aplikacji w chmurze z narzędziami takimi jak Docker, Kubernetes i Podman. Wielu deweloperów wybiera kontenery, ponieważ łatwo spakować aplikację z jej zależnościami i uzyskać ją, aby niezawodnie była uruchamiana na dowolnym hoście kontenera. Istnieje obszerna obsługa korzystania z platformy .NET z kontenerami.
Platforma Docker oferuje doskonałe omówienie kontenerów. Docker Desktop: Community Edition to dobre narzędzie do używania kontenerów na komputerze stacjonarnym dewelopera.
Obrazy platformy .NET
Oficjalne obrazy kontenerów platformy .NET są publikowane w Rejestr Artefaktów Microsoft i można je odnaleźć w usłudze Docker Hub. Istnieją obrazy środowiska uruchomieniowego dla obrazów środowiska produkcyjnego i zestawu SDK do tworzenia kodu dla systemów Linux (Alpine, Debian, Ubuntu, Mariner) i Windows. Aby uzyskać więcej informacji, zobacz Obrazy kontenerów platformy .NET.
Obrazy platformy .NET są regularnie aktualizowane po opublikowaniu nowej poprawki .NET lub zaktualizowaniu obrazu podstawowego systemu operacyjnego.
Obrazy kontenerów z systemem Ubuntu to obrazy kontenerów z minimalnym zestawem składników wymaganych przez środowisko uruchomieniowe platformy .NET. Te obrazy są o 100 MB mniejsze niż zwykłe obrazy systemu Ubuntu i mają mniej CVE, ponieważ mają mniej składników. W szczególności nie zawierają powłoki ani menedżera pakietów, co znacznie poprawia ich profil zabezpieczeń. Obejmują one również użytkownika innego niż główny i są skonfigurowane z włączonym tym użytkownikiem.
Kompilowanie obrazów kontenerów
Obraz kontenera można utworzyć przy użyciu pliku Dockerfile lub opierać się na zestawie SDK platformy .NET w celu utworzenia obrazu. Aby uzyskać przykłady dotyczące tworzenia obrazów, zobacz dotnet/dotnet-docker i dotnet/sdk-container-builds.
W poniższym przykładzie pokazano kompilowanie i uruchamianie obrazu kontenera w kilku szybkich krokach (obsługiwanych w programach .NET 8 i .NET 7.0.300).
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init
to nowa opcja dla deweloperów, którzy chcą używać plików Dockerfile.
Porty
Mapowanie portów jest kluczową częścią używania kontenerów. Porty muszą być publikowane poza kontenerem, aby reagować na zewnętrzne żądania internetowe. ASP.NET Core obrazy kontenerów zmienione na platformie .NET 8 domyślnie nasłuchują na porcie 8080
. Nasłuchuje na porcie 80
.NET 6 i 7.
W poprzednim przykładzie za pomocą docker run
polecenia port 8000
hosta jest mapowany na port 8080
kontenera . Platforma Kubernetes działa w podobny sposób.
Zmienne ASPNETCORE_HTTP_PORTS
środowiskowe , ASPNETCORE_HTTPS_PORTS
i ASPNETCORE_URLS
mogą służyć do konfigurowania tego zachowania.
Użytkownicy
Począwszy od platformy .NET 8, wszystkie obrazy zawierają użytkownika innego niż główny o nazwie app
. Domyślnie obrazy rozdrobnione są skonfigurowane z włączonym tym użytkownikiem. Funkcja publikowania aplikacji jako kontenera platformy .NET (pokazana w sekcji Tworzenie obrazów kontenerów ) również domyślnie konfiguruje obrazy z włączonym tym użytkownikiem. We wszystkich innych scenariuszach app
użytkownik można ustawić ręcznie, na przykład za USER
pomocą instrukcji Dockerfile . Jeśli obraz został skonfigurowany za pomocą app
polecenia i należy uruchomić polecenie jako root
, USER
można użyć instrukcji , aby ustawić użytkownikowi root
wartość .
Bądź na bieżąco
Wiadomości związane z kontenerem są publikowane w dyskusjach dotnet/dotnet-docker oraz w kategorii "kontenery" bloga platformy .NET.
Usługi platformy Azure
Różne usługi platformy Azure obsługują kontenery. Utworzysz obraz platformy Docker dla aplikacji i wdrożysz go w jednej z następujących usług:
Azure Kubernetes Service (AKS)
Skalowanie i organizowanie kontenerów systemu Windows i Linux przy użyciu platformy Kubernetes.Azure App Service
Wdrażanie aplikacji internetowych lub interfejsów API przy użyciu kontenerów w środowisku PaaS.Azure Container Apps
Uruchamianie obciążeń kontenerów bez zarządzania serwerami, orkiestracją lub infrastrukturą oraz korzystanie z natywnej obsługi dapr i KEDA w celu obserwowania i skalowania do zera.Azure Container Instances
Tworzenie pojedynczych kontenerów w chmurze bez żadnych usług zarządzania wyższego poziomu.Azure Batch
Uruchamianie powtarzających się zadań obliczeniowych przy użyciu kontenerów.Azure Service Fabric
Lift, shift i modernizuj aplikacje .NET do mikrousług przy użyciu kontenerów systemu Windows i Linux.Azure Container Registry
Przechowuj obrazy kontenerów i zarządzaj nimi w różnych typach wdrożeń platformy Azure.