Visual Studio'da Docker kapsayıcılarını özelleştirme

Projenize Docker desteği eklediğinizde Visual Studio tarafından oluşturulan Dockerfile dosyasını düzenleyerek kapsayıcı görüntülerinizi özelleştirebilirsiniz. Visual Studio IDE'den özelleştirilmiş bir kapsayıcı oluştururken veya bir komut satırı derlemesi ayarlarken, Visual Studio'nun projelerinizi oluşturmak için Dockerfile'ı nasıl kullandığını bilmeniz gerekir. Bu tür ayrıntıları bilmeniz gerekir çünkü performans nedenleriyle Visual Studio, Dockerfile'da belirgin olmayan kapsayıcılı uygulamalar oluşturmak ve çalıştırmak için özel bir işlem izler.

Dockerfile dosyasında bir değişiklik yapmak istediğinizi ve sonuçları hem hata ayıklamada hem de üretim kapsayıcılarında görmek istediğinizi varsayalım. Bu durumda, dockerfile dosyasına ilk aşamayı (genellikle base) değiştirmek için komutlar ekleyebilirsiniz. Bkz . Hata ayıklama ve üretim için kapsayıcı görüntüsünü değiştirme. Ancak, yalnızca hata ayıklarken değişiklik yapmak ancak üretim yapmak istemiyorsanız, başka bir aşama oluşturmanız ve Visual Studio'ya derlemelerde hata ayıklama için bu aşamayı kullanmasını bildirmek için derleme ayarını kullanmanız DockerfileFastModeStage gerekir. Bkz . Hata ayıklama için kapsayıcı görüntüsünü değiştirme.

Bu makalede kapsayıcılı uygulamalar için Visual Studio derleme işlemi ayrıntılı olarak açıklanmış, ardından Dockerfile'ın hem hata ayıklamayı hem de üretim derlemelerini etkileyecek şekilde veya yalnızca hata ayıklama için nasıl değiştirileceğine ilişkin bilgiler yer alır.

Visual Studio'da Dockerfile derlemeleri

Not

Bu bölümde, Dockerfile kapsayıcı derleme türünü seçtiğinizde Visual Studio tarafından kullanılan kapsayıcı derleme işlemi açıklanmaktadır. .NET SDK derleme türünü kullanıyorsanız özelleştirme seçenekleri farklıdır ve bu bölümdeki bilgiler geçerli değildir. Bunun yerine bkz. Dotnet publish ile bir .NET uygulamasını kapsayıcıya alma ve kapsayıcı derleme işlemini yapılandırmak için kapsayıcınızı özelleştirme bölümünde açıklanan özellikleri kullanın.

Çok aşamalı derleme

Visual Studio Docker kapsayıcılarını kullanmayan bir proje oluşturduğunda, yerel makinede MSBuild'i çağırır ve çıkış dosyalarını yerel çözüm klasörünüz altında bir klasörde (genellikle bin) oluşturur. Ancak kapsayıcılı bir proje için derleme işlemi Dockerfile'ın kapsayıcılı uygulamayı oluşturmaya yönelik yönergelerini dikkate alır. Visual Studio'da kullanılan Dockerfile birden çok aşamaya ayrılır. Bu işlem Docker'ın çok aşamalı derleme özelliğine dayanır.

Çok aşamalı derleme özelliği, kapsayıcı oluşturma işlemini daha verimli hale getirmenize yardımcı olur ve yalnızca çalışma zamanında uygulamanızın ihtiyaç duyduğu bitleri içermelerine izin vererek kapsayıcıları küçültür. Çok aşamalı derleme .NET Framework projeleri için değil .NET Core projeleri için kullanılır.

Çok aşamalı derleme, kapsayıcı görüntülerinin ara görüntüler üreten aşamalarda oluşturulmasını sağlar. Örnek olarak, tipik bir Dockerfile'ı göz önünde bulundurun. İlk aşama Visual Studio'nun oluşturduğu Dockerfile'da çağrılır base , ancak araçlar bu adı gerektirmez.

FROM mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

Dockerfile'daki satırlar, Microsoft Container Registry'den (mcr.microsoft.com) ASP.NET görüntüsüyle başlar ve 80 ve 443 numaralı bağlantı noktalarını kullanıma sunan ve çalışma dizinini olarak /appayarlayan bir ara görüntü base oluşturur.

Sonraki aşama aşağıdaki gibi görünen şeklindedir build:

FROM mcr.microsoft.com/dotnet/sdk:3.1-buster-slim AS build
WORKDIR /src
COPY ["WebApplication43/WebApplication43.csproj", "WebApplication43/"]
RUN dotnet restore "WebApplication43/WebApplication43.csproj"
COPY . .
WORKDIR "/src/WebApplication43"
RUN dotnet build "WebApplication43.csproj" -c Release -o /app/build

Aşamanın build tabandan devam etme yerine kayıt defterinden farklı bir özgün görüntüden (sdk yerine aspnet) başladığını görebilirsiniz. Görüntü sdk tüm derleme araçlarına sahiptir ve bu nedenle yalnızca çalışma zamanı bileşenlerini içeren aspnet görüntüsünden çok daha büyüktür. Dockerfile dosyasının geri kalanına baktığınızda ayrı bir görüntü kullanmanın nedeni netleşir:

FROM build AS publish
RUN dotnet publish "WebApplication43.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication43.dll"]

Son aşama, uygulamasından baseyeniden başlar ve yayımlanan çıkışı son görüntüye kopyalamak için öğesini içerir COPY --from=publish . Bu işlem, görüntüdeki tüm derleme araçlarını sdk içermesi gerekmeyen son görüntünün çok daha küçük olmasını mümkün kılar.

MSBuild

Not

Bu bölümde Dockerfile kapsayıcı derleme türünü seçtiğinizde Docker kapsayıcılarınızı nasıl özelleştirebileceğiniz açıklanmaktadır. .NET SDK derleme türünü kullanıyorsanız özelleştirme seçenekleri farklıdır ve bu makaledeki bilgiler geçerli değildir. Bunun yerine bkz . Dotnet publish ile bir .NET uygulamasını kapsayıcıya alma.

.NET Framework projeleri için Visual Studio tarafından oluşturulan dockerfile'lar (ve Visual Studio 2017 Güncelleştirme 4'ün öncesinde Visual Studio sürümleriyle oluşturulan .NET Core projeleri için) çok aşamalı Dockerfile'lar değildir. Bu Dockerfile'lardaki adımlar kodunuzu derlemez. Bunun yerine, Visual Studio bir .NET Framework Dockerfile oluşturduğunuzda, ilk olarak MSBuild kullanarak projenizi derler. Bu başarılı olduğunda, Visual Studio dockerfile'ı oluşturur ve bu da MSBuild'den elde edilen Docker görüntüsüne derleme çıkışını kopyalar. Kodunuzu derleme adımları Dockerfile'a dahil olmadığından komut satırından kullanarak docker build .NET Framework Dockerfiles oluşturamazsınız. Bu projeleri oluşturmak için MSBuild kullanmalısınız.

Tek bir Docker kapsayıcı projesi için görüntü oluşturmak için komut seçeneğiyle /t:ContainerBuild MSBuild kullanabilirsiniz. Bu komut MSBuild'e varsayılan hedef yerine hedefi ContainerBuildBuildoluşturmasını söyler. Örneğin:

MSBuild MyProject.csproj /t:ContainerBuild /p:Configuration=Release

Çözümünüzü Visual Studio IDE'den oluştururken Çıktı penceresinde gördüğünüze benzer bir çıktı görürsünüz. /p:Configuration=ReleaseVisual Studio'da çok aşamalı derleme iyileştirmesinin kullanıldığı durumlarda Hata ayıklama yapılandırması oluşturmanın sonuçları beklendiği gibi olmayabilir. Bkz. Hata Ayıklama.

Docker Compose projesi kullanıyorsanız görüntü oluşturmak için şu komutu kullanın:

msbuild /p:SolutionPath=<solution-name>.sln /p:Configuration=Release docker-compose.dcproj

Hata ayıklama

Not

Bu bölümde Dockerfile kapsayıcı derleme türünü seçtiğinizde Docker kapsayıcılarınızı nasıl özelleştirebileceğiniz açıklanmaktadır. .NET SDK derleme türünü kullanıyorsanız özelleştirme seçenekleri farklıdır ve bu bölümdeki bilgilerin çoğu geçerli değildir. Bunun yerine bkz . Dotnet publish ile bir .NET uygulamasını kapsayıcıya alma.

Hata ayıklama yapılandırmasında derleme yaptığınızda, Visual Studio'nun kapsayıcılı projeler için derleme işleminin performansına yardımcı olan çeşitli iyileştirmeler vardır. Kapsayıcılı uygulamalar için derleme işlemi, Dockerfile'da özetlenen adımları takip etmek kadar basit değildir. Kapsayıcıda derleme, yerel makinede derlemekten daha yavaştır. Bu nedenle, Hata Ayıklama yapılandırmasında derleme yaptığınızda, Visual Studio projelerinizi yerel makinede oluşturur ve ardından birim bağlamayı kullanarak çıkış klasörünü kapsayıcıya paylaşır. Bu iyileştirmenin etkinleştirildiği bir derlemeye Hızlı mod derlemesi adı verilir.

Hızlı modda Visual Studio, Docker'a Dockerfile'da yalnızca ilk aşamayı (normalde aşama) oluşturmasını söyleyen bir bağımsız değişkenle çağrı docker build yaparbase. Bunu, Container Tools MSBuild özellikleri bölümünde açıklanan MSBuild özelliğini DockerfileFastModeStageayarlayarak değiştirebilirsiniz. Visual Studio, Dockerfile içeriğini dikkate almadan işlemin geri kalanını işler. Bu nedenle Dockerfile'ınızı kapsayıcı ortamını özelleştirmek veya ek bağımlılıklar yüklemek gibi bir değişiklik yaptığınızda, değişikliklerinizi ilk aşamaya yerleştirmeniz gerekir. Dockerfile'ın build, publishveya final aşamalarına yerleştirilen özel adımlar yürütülemez.

Bu performans iyileştirmesi yalnızca Hata Ayıklama yapılandırmasında derleme yaptığınızda oluşur. Yayın yapılandırmasında derleme, Dockerfile'da belirtildiği gibi kapsayıcıda gerçekleşir.

Dockerfile'ın belirttiği gibi performans iyileştirmesini ve derlemesini devre dışı bırakmak istiyorsanız, proje dosyasında ContainerDevelopmentMode özelliğini aşağıdaki gibi Normal olarak ayarlayın:

<PropertyGroup>
   <ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
</PropertyGroup>

Performans iyileştirmesini geri yüklemek için özelliğini proje dosyasından kaldırın.

Hata ayıklamaya (F5) başladığınızda, mümkünse önceden başlatılan bir kapsayıcı yeniden kullanılır. Önceki kapsayıcıyı yeniden kullanmak istemiyorsanız, Visual Studio'yu yeni bir kapsayıcı kullanmaya zorlamak için Visual Studio'da Yeniden Oluştur veya Temizle komutlarını kullanabilirsiniz.

Hata ayıklayıcıyı çalıştırma işlemi, proje ve kapsayıcı işletim sisteminin türüne bağlıdır:

Senaryo Hata ayıklayıcı işlemi
.NET Core uygulamaları (Linux kapsayıcıları) Visual Studio kapsayıcıyı indirir vsdbg ve kapsayıcıyla eşler, ardından programınız ve bağımsız değişkenlerinizle (diğer bir ifadeyle dotnet webapp.dll) çağrılır ve hata ayıklayıcı işleme eklenir.
.NET Core uygulamaları (Windows kapsayıcıları) Visual Studio bunu kullanır onecoremsvsmon ve kapsayıcıyla eşler, giriş noktası olarak çalıştırır ve ardından Visual Studio buna bağlanır ve programa ekler. Bu, normalde başka bir bilgisayarda veya sanal makinede uzaktan hata ayıklamayı ayarlamaya benzer.
.NET Framework uygulamaları Visual Studio bunu kullanır msvsmon ve kapsayıcıyla eşler, Visual Studio'nun bağlanabileceği giriş noktasının bir parçası olarak çalıştırır ve programa ekler.

hakkında vsdbg.exebilgi için bkz . Visual Studio'dan Linux ve OS X üzerinde .NET Core'un Offroad hata ayıklaması.

Hata ayıklama ve üretim için kapsayıcı görüntüsünü değiştirme

Hem hata ayıklama hem de üretim için kapsayıcı görüntüsünü değiştirmek için aşamayı base değiştirin. Özelleştirmelerinizi, genellikle Dockerfile'ın ilk bölümü olan temel aşama bölümünde Dockerfile'a ekleyin. Dockerfile komutları hakkında bilgi için Docker belgelerindeki Dockerfile başvurusuna bakın.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# <add your commands here>

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication3/WebApplication3.csproj", "WebApplication3/"]
RUN dotnet restore "WebApplication3/WebApplication3.csproj"
COPY . .
WORKDIR "/src/WebApplication3"
RUN dotnet build "WebApplication3.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication3.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication3.dll"]

Kapsayıcı görüntüsünü yalnızca hata ayıklama için değiştirme

Bu senaryo, tanılama amacıyla bir şey yükleme gibi hata ayıklama işleminde size yardımcı olması için kapsayıcılarınızla bir şey yapmak istediğinizde geçerlidir, ancak bunun üretim derlemelerinde yüklü olmasını istemezsiniz.

Kapsayıcıyı yalnızca hata ayıklama amacıyla değiştirmek için bir aşama oluşturun ve ardından MSBuild özelliğini DockerfileFastModeStage kullanarak Visual Studio'ya hata ayıklarken özelleştirilmiş aşamanızı kullanmasını söyleyin. Dockerfile komutları hakkında bilgi için Docker belgelerindeki Dockerfile başvurusuna bakın.

Aşağıdaki örnekte paketini procps-ngyükleyeceğiz, ancak yalnızca hata ayıklama modunda yükleyeceğiz. Bu paket, Visual Studio'nun gerektirdiği ancak burada kullanılan Mariner görüntüsünde olmayan komutunu pidofsağlar. Hızlı mod hata ayıklaması için kullandığımız aşama, burada tanımlanan özel bir aşamadır debug. Hızlı mod aşamasının build veya publish aşamasından devralması gerekmez, visual studio bu makalenin base önceki bölümlerinde açıklandığı gibi uygulamayı çalıştırmak için gereken her şeyi içeren bir birim bağladığından doğrudan aşamadan devralabilir.

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0-cbl-mariner2.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM base AS debug
RUN tdnf install procps-ng -y

FROM mcr.microsoft.com/dotnet/sdk:6.0-cbl-mariner2.0 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

Proje dosyasında, Visual Studio'ya hata ayıklama sırasında özel aşamanızı debug kullanmasını bildirmek için bu ayarı ekleyin.

  <PropertyGroup>
     <!-- other property settings -->
     <DockerfileFastModeStage>debug</DockerfileFastModeStage>
  </PropertyGroup>

Sonraki bölümlerde, farklı bir giriş noktası belirtmek istemeniz veya uygulamanızın SSL etkin olması ve SSL sertifikalarının nasıl işleneceğini etkileyebilecek bir şeyi değiştirmeniz gibi bazı durumlarda yararlı olabilecek bilgiler bulunur.

Komut satırından oluşturma

Visual Studio dışında dockerfile ile bir kapsayıcı projesi oluşturmak istiyorsanız, komut satırından derlemek için , MSBuild, dotnet buildveya dotnet publish kullanabilirsinizdocker build.

.NET SDK derleme türünü kullanıyorsanız Dockerfile'nız docker buildyoktur, bu nedenle komut satırında derlemek için ; yerine veya kullanamazsınız dotnet buildMSBuilddotnet publish.

Docker derlemesi kullanma

Komut satırından kapsayıcılı bir çözüm oluşturmak için genellikle çözümdeki her proje için komutunu docker build <context> kullanabilirsiniz. Derleme bağlamı bağımsız değişkenini sağlarsınız. Dockerfile derleme bağlamı, yerel makinede görüntüyü oluşturmak için çalışma klasörü olarak kullanılan klasördür. Örneğin, kapsayıcıya kopyalarken dosyaları kopyaladığınız klasördür. .NET Core projelerinde çözüm dosyasını (.sln) içeren klasörü kullanın. Göreli yol olarak ifade edilen bu bağımsız değişken genellikle bir proje klasöründeki Dockerfile için ".." ve üst klasöründeki çözüm dosyasıdır. .NET Framework projeleri için derleme bağlamı çözüm klasörü değil proje klasörüdür.

docker build -f Dockerfile ..

Proje ısınması

Proje ısınması, sonraki çalıştırmaların (F5 veya Ctrl+F5) performansını artırmak için bir proje için Docker profili seçildiğinde (bir proje yüklendiğinde veya Docker desteği eklendiğinde) gerçekleşen bir dizi adımı ifade eder. Bu davranış, Araçlar>Seçenekleri>Kapsayıcı Araçları altında yapılandırılabilir. Arka planda çalışan görevler şunlardır:

  • Docker Desktop'ın yüklü ve çalışır durumda olup olmadığını denetleyin.
  • Docker Desktop'ın projeyle aynı işletim sistemine ayarlandığından emin olun.
  • Dockerfile'ın ilk aşamasındaki görüntüleri çekin ( base çoğu Dockerfiles içindeki aşama).
  • Dockerfile'ı derleyin ve kapsayıcıyı başlatın.

Isınma yalnızca Hızlı modda gerçekleşir, bu nedenle çalışan kapsayıcının uygulama klasörü birimine bağlı olur. Başka bir deyişle uygulamada yapılan değişiklikler kapsayıcıyı geçersiz kılmaz. Bu davranış hata ayıklama performansını önemli ölçüde artırır ve büyük görüntüleri çekme gibi uzun süre çalışan görevler için bekleme süresini azaltır.

Birim eşleme

Kapsayıcılarda hata ayıklamanın çalışması için Visual Studio, konak makineden hata ayıklayıcı ve NuGet klasörlerini eşlemek için birim eşlemesini kullanır. Birim eşlemesi buradaki Docker belgelerinde açıklanmıştır. Visual Studio'daki Kapsayıcılar penceresini kullanarak kapsayıcının birim eşlemelerini görüntüleyebilirsiniz.

Kapsayıcınıza bağlanan birimler şunlardır:

Hacim Açıklama
Uygulama klasörü Dockerfile dosyasının bulunduğu proje klasörünü içerir.
NuGet paketleri klasörleri Projedeki obj{project}.csproj.nuget.g.props dosyasından okunan NuGet paketlerini ve geri dönüş klasörlerini içerir.
Uzaktan hata ayıklayıcı Proje türüne bağlı olarak kapsayıcıda hata ayıklayıcısını çalıştırmak için gereken bitleri içerir. Hata Ayıklama bölümüne bakın.
Kaynak klasör Docker komutlarına geçirilen derleme bağlamını içerir.

Kapsayıcınıza bağlanan birimler aşağıdadır. Kapsayıcılarınızda gördükleriniz, kullandığınız Visual Studio 2022'nin ikincil sürümüne bağlı olarak farklılık gösterebilir.

Hacim Açıklama
Uygulama klasörü Dockerfile dosyasının bulunduğu proje klasörünü içerir.
HotReloadAgent Sık erişimli yeniden yükleme aracısının dosyalarını içerir.
HotReloadProxy Konak yeniden yükleme aracısının konakta Visual Studio ile iletişim kurmasını sağlayan bir hizmeti çalıştırmak için gereken dosyaları içerir.
NuGet paketleri klasörleri Projedeki obj{project}.csproj.nuget.g.props dosyasından okunan NuGet paketlerini ve geri dönüş klasörlerini içerir.
Uzaktan hata ayıklayıcı Proje türüne bağlı olarak kapsayıcıda hata ayıklayıcısını çalıştırmak için gereken bitleri içerir. Bu, Hata Ayıklama bölümünde daha ayrıntılı olarak açıklanmıştır.
Kaynak klasör Docker komutlarına geçirilen derleme bağlamını içerir.
TokenService.Proxy Bir hizmeti çalıştırmak için gereken dosyaları içerir; VisualStudioCredential'ın konakta Visual Studio ile iletişim kurmasını sağlar.

.NET 8 için, kökte ek bağlama noktaları ve kullanıcı gizli dizileri ve HTTPS sertifikası içeren uygulama kullanıcısı için de mevcut olabilir. Visual Studio 17.10 önizlemesinde Çalışırken Yeniden Yükleme ve Belirteç Hizmeti birimi, başka bir bileşen olan Distroless Yardımcısı ile birlikte tek bir bağlama noktası /VSToolsaltında birleştirilir.

Not

Visual Studio 17.10 önizleme Docker Desktop olmadan Linux için Windows Alt Sistemi'de (WSL) Docker Altyapısı kullanıyorsanız, birim bağlamaları oluştururken ortam değişkenini VSCT_WslDaemon=1 Visual Studio'nun WSL yollarını kullanmasını sağlamak için ayarlayın. Microsoft.VisualStudio.Azure.Containers.Tools.Targets 1.20.0-Preview 1 NuGet paketi de gereklidir.

ASP.NET temel web uygulamaları için SSL sertifikası ve kullanıcı gizli dizileri için iki klasör daha bulunabilir ve bu klasör sonraki bölümde daha ayrıntılı olarak açıklanmıştır.

Ayrıntılı kapsayıcı araçları günlüklerini etkinleştirme

Tanılama amacıyla belirli Kapsayıcı Araçları günlüklerini etkinleştirebilirsiniz. Belirli ortam değişkenlerini ayarlayarak bu günlükleri etkinleştirebilirsiniz. Tek kapsayıcılı projeler için ortam değişkeni olur MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLEDve ardından içinde %tmp%\Microsoft.VisualStudio.Containers.Toolsoturum açar. Docker Compose projeleri için, içinde oturum açan %tmp%\Microsoft.VisualStudio.DockerCompose.Tools' dırMS_VS_DOCKER_TOOLS_LOGGING_ENABLED.

Dikkat

Günlük etkinleştirildiğinde ve Azure kimlik doğrulaması için bir belirteç ara sunucusu kullandığınızda, kimlik doğrulama kimlik bilgileri düz metin olarak günlüğe kaydedilebilir. Bkz. Azure kimlik doğrulamayı yapılandırma.

Kapsayıcı giriş noktası

Visual Studio, proje türüne ve kapsayıcı işletim sistemine bağlı olarak özel bir kapsayıcı giriş noktası kullanır. Farklı birleşimler şunlardır:

Konteyner türü Giriş noktası
Linux kapsayıcıları Giriş noktası, tail -f /dev/nullkapsayıcıyı çalışır durumda tutmak için sonsuz bir bekleme noktasıdır. Uygulama hata ayıklayıcısı aracılığıyla başlatıldığında, uygulamayı çalıştırmakla sorumlu olan hata ayıklayıcıdır (yani). dotnet webapp.dll Hata ayıklama olmadan başlatılırsa, araç uygulamayı çalıştırmak için bir docker exec -i {containerId} dotnet webapp.dll çalıştırır.
Windows kapsayıcıları Giriş noktası, hata ayıklayıcısını çalıştıran bir C:\remote_debugger\x64\msvsmon.exe /noauth /anyuser /silent /nostatus giriş noktasıdır, bu nedenle bağlantıları dinler. Bu yöntem, hata ayıklayıcı uygulamayı çalıştırdığında geçerlidir. Hata ayıklama olmadan başlatıldığında bir docker exec komut kullanılır. .NET Framework web uygulamaları için giriş noktası, komuta eklendiğinde ServiceMonitor biraz farklıdır.

Kapsayıcı giriş noktası yalnızca Docker Compose projelerinde değiştirilebilir, tek kapsayıcılı projelerde değiştirilebilir.

SSL özellikli ASP.NET Core uygulamaları

Visual Studio'daki kapsayıcı araçları, geliştirme sertifikasına sahip SSL özellikli ASP.NET çekirdek uygulamada, kapsayıcılar olmadan çalışmasını beklediğiniz şekilde hata ayıklamayı destekler. Bunu yapmak için Visual Studio sertifikayı dışarı aktarmak ve kapsayıcıda kullanılabilir hale getirmek için birkaç adım daha ekler. Kapsayıcıda hata ayıklama sırasında Visual Studio'nın sizin için işlediği akış aşağıdadır:

  1. Araç aracılığıyla dev-certs konak makinesinde yerel geliştirme sertifikasının mevcut ve güvenilir olmasını sağlar.

  2. Sertifikayı, bu uygulama için kullanıcı gizli dizileri deposunda depolanan güvenli bir parolayla 'a %APPDATA%\ASP.NET\Https aktarır.

  3. Birim, aşağıdaki dizinleri bağlar:

    • *%APPDATA%\Microsoft\UserSecrets
    • *%APPDATA%\ASP.NET\Https

ASP.NET Core, Https klasörünün altındaki derleme adıyla eşleşen bir sertifika arar. Bu nedenle bu yoldaki kapsayıcıya eşlenir. Sertifika yolu ve parola alternatif olarak ortam değişkenleri (yani ASPNETCORE_Kestrel__Certificates__Default__Path ve ASPNETCORE_Kestrel__Certificates__Default__Password) kullanılarak veya kullanıcı gizli dizileri json dosyasında tanımlanabilir, örneğin:

{
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "c:\\app\\mycert.pfx",
        "Password": "strongpassword"
      }
    }
  }
}

Yapılandırmanız hem kapsayıcılı derlemeleri hem de kapsayıcılı olmayan derlemeleri destekliyorsa, yollar kapsayıcı ortamına özgü olduğundan ortam değişkenlerini kullanmanız gerekir.

Kapsayıcılarda ASP.NET Core uygulamalarıyla SSL kullanma hakkında daha fazla bilgi için bkz . HTTPS üzerinden Docker ile ASP.NET Core görüntüleri barındırma.

Konakta ve HTTPS hizmet-hizmet iletişimi kapsayıcılarında güvenilen çok hizmetli bir uygulama için özel sertifikalar oluşturmayı gösteren bir kod örneği için bkz . CertExample.