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.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
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 /app
ayarlayan bir ara görüntü base
oluşturur.
Sonraki aşama aşağıdaki gibi görünen şeklindedir build
:
# This stage is used to build the service project
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:
# 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, uygulamasından base
yeniden 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.
Aşağıdaki tabloda Visual Studio tarafından oluşturulan tipik Dockerfile'da kullanılan aşamalar özetlemektedir:
Aşama | Açıklama |
---|---|
temel | 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). |
derleme | 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. |
publish | Bu aşama, derleme aşamasından türetilir ve projenizi yayımlar ve bu aşama 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
Aşama aotdebug
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ümlerinde kullanılır.
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.
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_ENABLED
ve ardından içinde %tmp%\Microsoft.VisualStudio.Containers.Tools
oturum açar. Docker Compose projeleri için, içinde oturum açan %tmp%\Microsoft.VisualStudio.DockerCompose.Tools
' dırMS_VS_DOCKER_TOOLS_LOGGING_ENABLED
.
Uyarı
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.
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ı