Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Projenize kapsayıcı desteği eklediğinizde Visual Studio'nın oluşturduğu 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ı değiştirmek için komutlar ekleyebilirsiniz (genellikle base). Bkz. Hata ayıklama ve üretimiçin kapsayıcı görüntüsünü değiştirme. Ancak, yalnızca hata ayıklarken değişiklik yapmak istiyorsanız ancak üretimde değişiklik yapmak istemiyorsanız, başka bir aşama oluşturmanız ve Visual Studio'ya hata ayıklama derlemeleri için bu aşamayı kullanmasını bildirmek için ContainerFastModeStage derleme ayarını kullanmanız gerekir. bkz. Kapsayıcı görüntüsünü yalnızcahata ayıklama için değiştirme.
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ı değiştirmek için komutlar ekleyebilirsiniz (genellikle base). Bkz. Hata ayıklama ve üretimiçin kapsayıcı görüntüsünü değiştirme. Ancak, yalnızca hata ayıklarken değişiklik yapmak istiyorsanız ancak üretimde değişiklik yapmak istemiyorsanız, başka bir aşama oluşturmanız ve Visual Studio'ya hata ayıklama derlemeleri için bu aşamayı kullanmasını bildirmek için DockerfileFastModeStage derleme ayarını kullanmanız gerekir. bkz. Kapsayıcı görüntüsünü yalnızcahata ayıklama için 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.
Önkoşullar
- Docker Desktop veya Podman Desktop.
- Visual Studio veya Podman desteği için Visual Studio 2026, ASP.NET ve web geliştirme, Azure geliştirme iş yükü ve/veya .NET masaüstü geliştirme iş yükü yüklü.
Önkoşullar
- Docker Desktop.
- ASP.NET ve web geliştirme, Azure geliştirme iş yükü ve/veya .NET masaüstü geliştirme iş yükü yüklü Visual Studio.
Visual Studio'da Dockerfile oluşturma işlemleri
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, dotnet publish ile bir .NET uygulamasını kapsayıcıya alma hakkında bilgi edinin ve kapsayıcı oluşturma sürecini yapılandırmak için özelleştirilmiş kapsayıcıda açıklanan özellikleri kullanarak yapılandırı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 çıktı dosyalarını yerel çözüm klasörünüz altındaki 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ılan bir yöntemdir.
Çok aşamalı yapı, kapsayıcı görüntülerin ara görüntüler üreten aşamalarda oluşturulmasına olanak tanır. Örnek olarak, tipik bir Dockerfile'ı göz önünde bulundurun. İlk aşama Visual Studio'nun oluşturduğu Dockerfile'da base olarak adlandırılır, ancak araçlar bu adı gerektirmez.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
Dockerfile'daki satırlar Microsoft Container Registry'den (mcr.microsoft.com) ASP.NET görüntüsüyle başlar ve 8080 ve 8081 bağlantı noktalarını kullanıma sunan ve çalışma dizinini olarak baseayarlayan bir ara görüntü /app oluşturur.
.NET 7 ve üzerini hedeflerken, kapsayıcıyı USER $APP_UID ortam değişkeninden APP_UIDalınan kullanıcı adıyla yükseltilmiş ayrıcalıklar olmadan çalışacak şekilde ayarlayan satır görüntülenir. Bağlantı noktaları, yükseltilmiş ayrıcalıklar gerektiren 80 ve 443 yerine 8080 ve 8081'tir.
Sonraki aşama, aşağıdaki gibi görünen build' dir:
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 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
build aşamasının tabandan devam etme yerine kayıt defterinden farklı bir özgün görüntüden (sdkyerineaspnet) başladığını görebilirsiniz.
sdk görüntüsü 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:
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication43.csproj" -c Release -o /app/publish
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication43.dll"]
Son aşama base noktasından başlayarak, yayımlanan çıktıyı son görüntüye kopyalamak için COPY --from=publish içerir. Bu işlem, sdk görüntüdeki tüm derleme araçlarını içermesi gerekmeyen son görüntünün çok daha küçük olmasını mümkün kılar.
Aşağıdaki tabloda Visual Studio tarafından oluşturulan tipik Dockerfile'da kullanılan aşamalar özetlemektedir:
| Sahne | Açıklama |
|---|---|
| taban | Oluşturulan uygulamanın yayımlandığı temel çalışma zamanı görüntüsünü oluşturur. Çalışma zamanında kullanılabilir olması gereken bağlantı noktaları ve ortam değişkenleri gibi ayarlar buraya gider. Bu aşama, VS'den hızlı modda çalışırken kullanılır (Hata ayıklama yapılandırması için varsayılan). |
| inşa etmek | Proje bu aşamada oluşturulmuş. Projenizi oluşturmak için gerekli bileşenleri içeren .NET SDK temel görüntüsü kullanılır. |
| yayınlamak | Bu aşama, derleme aşamasından türetilir, projenizi yayımlar ve proje son aşamaya kopyalanır. |
| son | Bu aşama, uygulamanın nasıl başlatılıp üretimde veya VS'den normal modda çalıştırılırken (Hata Ayıklama yapılandırması kullanılmadığında varsayılan) nasıl kullanılacağını yapılandırılır. |
| aotdebug | Bu aşama, normal modda hata ayıklamayı desteklemek için VS'den başlatılırken son aşamanın temeli olarak kullanılır (Hata Ayıklama yapılandırması kullanılmadığında varsayılan). |
Not
aotdebug aşaması yalnızca Linux kapsayıcıları için desteklenir. Projede yerel Önceden (AOT) dağıtımı etkinleştirildiyse Visual Studio 2022 17.11 ve sonraki sürümlerde kullanılır.
Proje hazırlık aşaması
Proje ısınması , sonraki çalıştırmaların (F5 veya Ctrl+F5) performansını artırmak için bir proje için Kapsayıcı profili seçildiğinde (bir proje yüklendiğinde veya kapsayıcı desteği eklendiğinde) gerçekleşen bir dizi adımı ifade eder.
Bu davranış, Tüm Ayarlar>Kapsayıcı Araçları altındaki Araçlar>Seçenekleri bölmesinde yapılandırılabilir. Arka planda çalışan görevler şunlardır:
- Kapsayıcı çalışma zamanının (Docker Desktop veya Podman) yüklü ve çalışır durumda olup olmadığını denetleyin.
- Docker Desktop'ın projeyle aynı işletim sistemine ayarlandığından emin olun. (Bu denetim yalnızca Linux kapsayıcılarını destekleyen Podman için geçerli değildir.)
- Dockerfile'ın ilk aşamasındaki (
baseaşaması olan çoğu Dockerfile'da) görüntüleri çekin. - Dockerfile'ı oluşturun ve kapsayıcıyı başlatın.
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 (
baseaşaması olan çoğu Dockerfile'da) görüntüleri çekin. - Dockerfile'ı oluşturun ve kapsayıcıyı başlatın.
Isınma yalnızca Hızlı modunda gerçekleşir, bu nedenle çalışan kapsayıcıda app klasörü birim olarak bağlanmıştır. 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.
Ayrıntılı kapsayıcı araçları günlüklerini etkinleştir
Tanı amaçlı olarak belirli konteyner araç 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 MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLED'dır ve bu, ardından %tmp%\Microsoft.VisualStudio.Containers.Toolsiçine günlüğe kaydedilir. Docker Compose projeleri için değişken MS_VS_DOCKER_TOOLS_LOGGING_ENABLED olup %tmp%\Microsoft.VisualStudio.DockerCompose.Tools içinde oturum açar.
Uyarı
Günlük kaydı etkinleştirildiğinde ve Azure kimlik doğrulaması için bir belirteç ara sunucusu kullandığınızda, kimlik doğrulama bilgileri düz yazı olarak günlüğe kaydedilebilir. Azure kimlik doğrulamayı yapılandırmayı görün.
Sonraki adımlar
Dockerfile aşamalarını kullanarak hata ayıklama ve üretim için kullanılan görüntüleri özelleştirme hakkında bilgi edinin. Örneğin, görüntüye yalnızca hata ayıklarken bir araç yükleme. Bkz. hata ayıklama için kapsayıcı görüntülerini yapılandırma.
İlgili içerik
- kapsayıcı projeleri için MSBuild özellikleri.
- Windows'da Dockerfile
- Windows'da Linux kapsayıcıları