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 runpolecenia port 8000 hosta jest mapowany na port 8080kontenera . Platforma Kubernetes działa w podobny sposób.

Zmienne ASPNETCORE_HTTP_PORTSśrodowiskowe , 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 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 USERpomocą 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 rootwartość .

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.

Następne kroki