Udostępnij za pośrednictwem


Wprowadzenie do platformy .NET i platformy Docker

Kontenery to jeden z najpopularniejszych sposobów wdrażania i hostowania aplikacji w chmurze z narzędziami takimi jak Docker, Kubernetesi 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 przy użyciu 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 usłudze Microsoft Artifact Registry i są dostępne na Docker Hub. Istnieją obrazy środowiska uruchomieniowego do produkcji oraz obrazy SDK do kompilowania kodu, dla systemów Linux (Alpine, Debian, Ubuntu, Mariner) i Windows. Aby uzyskać więcej informacji, zobacz obrazy kontenerów platformy .NET oznaczone jako i.

Obrazy .NET są regularnie aktualizowane, gdy publikowana jest nowa poprawka .NET lub zaktualizowany zostaje obraz bazowy systemu operacyjnego.

Obrazy kontenerów Chiseled to obrazy kontenerów z systemem Ubuntu 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 CVEs, ponieważ mają mniej składników. W szczególności nie zawierają powłoki ani menedżera pakietów, co znacznie poprawia ich profil bezpieczeństwa. Obejmują one również użytkownika innego niż główny i są skonfigurowane z włączonym tym użytkownikiem.

Budowanie obrazów kontenerów

Obraz kontenera można utworzyć za pomocą Dockerfile lub korzystając z .NET SDK w celu utworzenia obrazu. Aby zapoznać się z przykładami dotyczącymi 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://zcusa.951200.xyz/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ą korzystania z kontenerów. Porty muszą być publikowane poza kontenerem, aby reagować na zewnętrzne żądania internetowe. ASP.NET Core obrazy kontenerów zmienione w platformy .NET 8 do nasłuchiwania na porcie 8080domyślnie. .NET 6 i 7 nasłuchuje na porcie 80.

W poprzednim przykładzie z docker runport hosta 8000 jest mapowany na port kontenera 8080. Platforma Kubernetes działa w podobny sposób.

Zmienne środowiskowe ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTSi ASPNETCORE_URLS mogą służyć do konfigurowania tego zachowania.

Użytkownicy

Począwszy od platformy .NET 8, wszystkie obrazy zawierają użytkownika o nazwie app, który nie jest użytkownikiem głównym. 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 można ustawić użytkownika app ręcznie, na przykład za pomocą instrukcji DockerfileUSER. Jeśli obraz został skonfigurowany przy użyciu app i polecenia muszą być uruchamiane jako root, można użyć instrukcji USER, aby ustawić dla użytkownika wartość root.

Bądź na bieżąco

Wiadomości związane z kontenerem są publikowane w dyskusji dotnet/dotnet-docker oraz do bloga platformy .NET "kontenery" kategorii.

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 & 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
    Uruchamiaj obciążenia kontenerów bez zarządzania serwerami, orkiestracją lub infrastrukturą, korzystając z natywnej obsługi Dapr oraz KEDA , co umożliwia obserwację i skalowanie do zera.

  • Azure Container Instances
    Tworzenie pojedynczych kontenerów w chmurze bez żadnych usług zarządzania wyższego poziomu.

  • usługi 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 & Linux.

  • usługi Azure Container Registry
    Przechowywanie obrazów kontenerów i zarządzanie nimi we wszystkich typach wdrożeń platformy Azure.

Następne kroki