ASP.NET Core ile Visual Studio Kapsayıcı Araçları
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Visual Studio 2017 ve sonraki sürümleri .NET Core'ı hedefleyen kapsayıcılı ASP.NET Core uygulamaları derlemeyi, hata ayıklamayı ve çalıştırmayı destekler. Hem Windows hem de Linux kapsayıcıları desteklenir.
Örnek kodu görüntüleme veya indirme (indirme)
Önkoşullar
Yükleme ve ayarlama
Docker yüklemesi için önce Windows için Docker: Yüklemeden önce bilinmesi gerekenler makalesinde yer alan bilgileri gözden geçirin. Ardından Windows için Docker'ı yükleyin.
Windows için Docker'daki Paylaşılan Sürücüler , birim eşlemeyi ve hata ayıklamayı destekleyecek şekilde yapılandırılmalıdır. Sistem Tepsisi'nin Docker simgesine sağ tıklayın, Ayarlar'ı ve Paylaşılan Sürücüler'i seçin. Docker'ın dosyaları depoladığı sürücüyü seçin. Uygula'ya tıklayın.
İpucu
Visual Studio 2017 sürüm 15.6 ve üzeri, Paylaşılan Sürücüler yapılandırılmadığında sorulur.
Docker kapsayıcısına proje ekleme
ASP.NET Core projesini kapsayıcılı hale getirmek için projenin .NET Core'ı hedeflemesi gerekir. Hem Linux hem de Windows kapsayıcıları desteklenir.
Projeye Docker desteği eklerken bir Windows veya Linux kapsayıcısı seçin. Docker konağı aynı kapsayıcı türünü çalıştırıyor olmalıdır. Çalışan Docker örneğinde kapsayıcı türünü değiştirmek için Sistem Tepsisi'nin Docker simgesine sağ tıklayın ve Windows kapsayıcılarına geç... veya Linux kapsayıcılarına geç...'i seçin.
Yeni uygulama
ASP.NET Core Web Uygulaması proje şablonlarıyla yeni bir uygulama oluştururken Docker Desteğini Etkinleştir onay kutusunu seçin:
Hedef çerçeve .NET Core ise, işletim sistemi açılan listesi bir kapsayıcı türünün seçilmesine izin verir.
Var olan uygulama
.NET Core'ı hedefleyen ASP.NET Core projeleri için, araçlar aracılığıyla Docker desteği eklemeye yönelik iki seçenek vardır. Projeyi Visual Studio'da açın ve aşağıdaki seçeneklerden birini belirleyin:
- Proje menüsünden Docker Desteği'ni seçin.
- Çözüm Gezgini'da projeye sağ tıklayın ve Docker Desteği Ekle'yi> seçin.
Visual Studio Kapsayıcı Araçları, .NET Framework'i hedefleyen mevcut bir ASP.NET Core projesine Docker eklemeyi desteklemez.
Dockerfile'a genel bakış
Son Docker görüntüsü oluşturmanın tarifi olan Dockerfile, proje köküne eklenir. içindeki komutları anlamak için Dockerfile başvurusuna bakın. Bu dockerfile, dört ayrı, adlandırılmış derleme aşamasına sahip çok aşamalı bir derleme kullanır:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1 AS base
WORKDIR /app
EXPOSE 59518
EXPOSE 44364
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
Yukarıdaki Dockerfile görüntüsü, ASP.NET Core çalışma zamanını ve NuGet paketlerini içerir. Paketler, başlangıç performansını geliştirmek için tam zamanında (JIT) derlenir.
Yeni proje iletişim kutusunun HTTPS için yapılandır onay kutusu işaretlendiğinde Dockerfile iki bağlantı noktasını kullanıma sunar. HTTP trafiği için bir bağlantı noktası kullanılır; diğer bağlantı noktası HTTPS için kullanılır. Onay kutusu işaretlenmemişse, HTTP trafiği için tek bir bağlantı noktası (80) kullanıma sunulur.
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
Yukarıdaki Dockerfile görüntüsü, başlangıç performansını geliştirmek için derlenen tam zamanında (JIT) ASP.NET Core NuGet paketlerini içerir.
Uygulamaya kapsayıcı düzenleyici desteği ekleme
Visual Studio 2017 sürüm 15.7 veya önceki sürümler, tek kapsayıcı düzenleme çözümü olarak Docker Compose'u destekler. Docker Compose yapıtları, Docker Desteği Ekle>aracılığıyla eklenir.
Visual Studio 2017 sürüm 15.8 veya üzeri, yalnızca yönerge belirtildiğinde bir düzenleme çözümü ekler. Çözüm Gezgini'da projeye sağ tıklayın ve Kapsayıcı Düzenleyicisi Desteği Ekle'yi> seçin. Aşağıdaki seçenekler kullanılabilir:
Docker Compose
Visual Studio Kapsayıcı Araçları, aşağıdaki dosyaları kullanarak çözüme bir docker-compose projesi ekler:
- docker-compose.dcproj: Projeyi temsil eden dosya. Kullanılacak işletim sistemini belirten bir
<DockerTargetOS>
öğe içerir. - .dockerignore: Derleme bağlamı oluşturulurken dışlanması gereken dosya ve dizin desenlerini listeler.
- docker-compose.yml: sırasıyla ve
docker-compose run
iledocker-compose build
derlenen ve çalıştırılan görüntülerin koleksiyonunu tanımlamak için kullanılan temel Docker Compose dosyası. - docker-compose.override.yml: Docker Compose tarafından okunan ve hizmetler için yapılandırma geçersiz kılmaları içeren isteğe bağlı bir dosya. Visual Studio bu dosyaları birleştirmek için yürütülür
docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml"
.
docker-compose.yml dosyası, proje çalıştırıldığında oluşturulan görüntünün adına başvurur:
version: '3.4'
services:
hellodockertools:
image: ${DOCKER_REGISTRY}hellodockertools
build:
context: .
dockerfile: HelloDockerTools/Dockerfile
Yukarıdaki örnekte, image: hellodockertools
uygulama Hata Ayıklama modunda çalıştığında görüntüyü hellodockertools:dev
oluşturur. Görüntühellodockertools:latest
, uygulama Yayın modunda çalıştırıldığında oluşturulur.
Görüntü kayıt defterine gönderiliyorsa görüntü adının önüne Docker Hub kullanıcı adı (örneğin, dockerhubusername/hellodockertools
) ekleyin. Alternatif olarak, görüntü adını yapılandırmaya bağlı olarak özel kayıt defteri URL'sini (örneğin, privateregistry.domain.com/hellodockertools
) içerecek şekilde değiştirin.
Derleme yapılandırmasına göre farklı bir davranış istiyorsanız (örneğin, Hata Ayıkla veya Yayın), yapılandırmaya özgü docker-compose dosyaları ekleyin. Dosyalar derleme yapılandırmasına göre (örneğin, docker-compose.vs.debug.yml ve docker-compose.vs.release.yml) adlandırılmalı ve docker-compose-override.yml dosyasıyla aynı konuma yerleştirilmelidir.
Yapılandırmaya özgü geçersiz kılma dosyalarını kullanarak, Hata Ayıklama ve Sürüm derleme yapılandırmaları için farklı yapılandırma ayarları (ortam değişkenleri veya giriş noktaları gibi) belirtebilirsiniz.
Docker Compose'un Visual Studio'da çalıştırılacak bir seçenek görüntülemesi için docker projesinin başlangıç projesi olması gerekir.
Service Fabric
Temel Önkoşullara ek olarak, Service Fabric düzenleme çözümü aşağıdaki önkoşulları gerektirir:
- Microsoft Azure Service Fabric SDK sürüm 2.6 veya üzeri
- Visual Studio'nun Azure Geliştirme iş yükü
Service Fabric, Windows'daki yerel geliştirme kümesinde Linux kapsayıcılarının çalıştırılmasını desteklemez. Proje zaten bir Linux kapsayıcısı kullanıyorsa, Visual Studio Windows kapsayıcılarına geçiş yapmak ister.
Visual Studio Kapsayıcı Araçları aşağıdaki görevleri yerine getirin:
Çözüme bir <project_name>Application Service Fabric Uygulaması projesi ekler.
ASP.NET Core projesine bir Dockerfile ve .dockerignore dosyası ekler. ASP.NET Core projesinde bir Dockerfile zaten varsa dockerfile.original olarak yeniden adlandırılır. Aşağıdakine benzer yeni bir Dockerfile oluşturulur:
# See https://aka.ms/containerimagehelp for information on how to use Windows Server 1709 containers with Service Fabric. # FROM microsoft/aspnetcore:2.0-nanoserver-1709 FROM microsoft/aspnetcore:2.0-nanoserver-sac2016 ARG source WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
ASP.NET Core projesinin
.csproj
dosyasına bir<IsServiceFabricServiceProject>
öğe ekler:<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
ASP.NET Core projesine bir PackageRoot klasörü ekler. Klasör, yeni hizmet için hizmet bildirimini ve ayarlarını içerir.
Daha fazla bilgi için bkz . Windows kapsayıcısında .NET uygulamasını Azure Service Fabric'e dağıtma.
Hata Ayıklama
Araç çubuğundaki hata ayıklama açılan listesinden Docker'ı seçin ve uygulamada hata ayıklamaya başlayın. Çıktı penceresinin Docker görünümü aşağıdaki eylemleri gösterir:
- Microsoft/dotnet çalışma zamanı görüntüsünün 2.1-aspnetcore-runtime etiketi alınır (önbellekte yoksa). Görüntü, ASP.NET Core ve .NET Core çalışma zamanlarını ve ilişkili kitaplıkları yükler. ASP.NET Core uygulamalarını üretim ortamında çalıştırmak için iyileştirilmiştir.
- Ortam
ASPNETCORE_ENVIRONMENT
değişkeni kapsayıcı içinde olarakDevelopment
ayarlanır. - Biri HTTP, diğeri HTTPS için olmak üzere dinamik olarak atanan iki bağlantı noktası kullanıma sunulur. localhost'a atanan bağlantı noktası komutuyla
docker ps
sorgulanabilir. - Uygulama kapsayıcıya kopyalanır.
- Varsayılan tarayıcı, dinamik olarak atanan bağlantı noktası kullanılarak kapsayıcıya eklenmiş hata ayıklayıcı ile başlatılır.
Uygulamanın sonuçta elde edilen Docker görüntüsü geliştirme olarak etiketlenmiş. Görüntü, microsoft/dotnet temel görüntüsünün 2.1-aspnetcore-runtime etiketini temel alır. docker images
Paket Yöneticisi Konsolu (PMC) penceresinde komutunu çalıştırın. Makinedeki görüntüler görüntülenir:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev d72ce0f1dfe7 30 seconds ago 255MB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
- Microsoft/aspnetcore çalışma zamanı görüntüsü alınır (önbellekte değilse).
- Ortam
ASPNETCORE_ENVIRONMENT
değişkeni kapsayıcı içinde olarakDevelopment
ayarlanır. - 80 numaralı bağlantı noktası kullanıma sunulur ve localhost için dinamik olarak atanmış bir bağlantı noktasına eşlenir. Bağlantı noktası Docker konağı tarafından belirlenir ve komutuyla
docker ps
sorgulanabilir. - Uygulama kapsayıcıya kopyalanır.
- Varsayılan tarayıcı, dinamik olarak atanan bağlantı noktası kullanılarak kapsayıcıya eklenmiş hata ayıklayıcı ile başlatılır.
Uygulamanın sonuçta elde edilen Docker görüntüsü geliştirme olarak etiketlenmiş. Görüntü, microsoft/aspnetcore temel görüntüsünü temel alır. docker images
Paket Yöneticisi Konsolu (PMC) penceresinde komutunu çalıştırın. Makinedeki görüntüler görüntülenir:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev 5fafe5d1ad5b 4 minutes ago 347MB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
Not
Hata ayıklama yapılandırmaları yinelemeli deneyimi sağlamak için birim bağlamayı kullandığından geliştirme görüntüsünde uygulama içeriği yok. Görüntü göndermek için Yayın yapılandırmasını kullanın.
docker ps
PMC'de komutunu çalıştırın. Uygulamanın kapsayıcıyı kullanarak çalıştığına dikkat edin:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 21 seconds ago Up 19 seconds 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Düzenle ve devam et
Statik dosya ve Razor görünümlerde yapılan değişiklikler, derleme adımına gerek kalmadan otomatik olarak güncelleştirilir. Güncelleştirmeyi görüntülemek için tarayıcıyı değiştirin, kaydedin ve yenileyin.
Kod dosyası değişiklikleri için derleme ve kapsayıcı içinde yeniden başlatma Kestrel gerekir. Değişikliği yaptıktan sonra işlemi gerçekleştirmek ve kapsayıcı içinde uygulamayı başlatmak için kullanın CTRL+F5
. Docker kapsayıcısı yeniden derlenmemiş veya durdurulmamış. docker ps
PMC'de komutunu çalıştırın. Özgün kapsayıcının 10 dakika önce çalışmaya devam olduğuna dikkat edin:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
baf9a678c88d hellodockertools:dev "C:\\remote_debugge..." 10 minutes ago Up 10 minutes 0.0.0.0:37630->80/tcp dockercompose4642749010770307127_hellodockertools_1
Docker görüntülerini yayımlama
Uygulamanın geliştirme ve hata ayıklama döngüsü tamamlandıktan sonra Visual Studio Container Tools, uygulamanın üretim görüntüsünün oluşturulmasına yardımcı olabilir. Yapılandırma açılan listesini Sürüm olarak değiştirin ve uygulamayı oluşturun. Araç, Docker Hub'dan derleme/yayımlama görüntüsünü alır (önbellekte değilse). Özel kayıt defterine veya Docker Hub'a gönderilebilen en son etiketle bir görüntü oluşturulur.
docker images
Görüntü listesini görmek için PMC'de komutunu çalıştırın. Aşağıdakine benzer bir çıkış görüntülenir:
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools latest e3984a64230c About a minute ago 258MB
hellodockertools dev d72ce0f1dfe7 4 minutes ago 255MB
microsoft/dotnet 2.1-sdk 9e243db15f91 6 days ago 1.7GB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools latest cd28f0d4abbd 12 seconds ago 349MB
hellodockertools dev 5fafe5d1ad5b 23 minutes ago 347MB
microsoft/aspnetcore-build 2.0 7fed40fbb647 13 days ago 2.02GB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
microsoft/aspnetcore-build
Önceki çıkışta listelenen ve microsoft/aspnetcore
görüntüleri , .NET Core 2.1'deki görüntülerle microsoft/dotnet
değiştirilir. Daha fazla bilgi için bkz . Docker depoları geçiş duyurusu.
Not
komutudocker images
, depo adları ve etiketleri yok> olarak <tanımlanan (yukarıda listelenmemiş) aracı görüntüler döndürür. Bu adsız görüntüler, çok aşamalı derleme Dockerfile tarafından oluşturulur. Bunlar, son görüntüyü oluşturma verimliliğini artırır; değişiklikler gerçekleştiğinde yalnızca gerekli katmanlar yeniden oluşturulur. Ara görüntülere artık gerek kalmadığında docker rmi komutunu kullanarak bunları silin.
Geliştirme görüntüsüne kıyasla üretim veya yayın görüntüsünün boyutunun daha küçük olması beklenebilir . Birim eşlemesi nedeniyle, hata ayıklayıcısı ve uygulama kapsayıcı içinde değil yerel makineden çalıştırılıyordu. En son görüntü, uygulamayı bir konak makinede çalıştırmak için gerekli uygulama kodunu paketlemiştir. Bu nedenle delta, uygulama kodunun boyutudur.
Ek kaynaklar
- Visual Studio ile kapsayıcı geliştirme
- Azure Service Fabric: Geliştirme ortamınızı hazırlama
- Windows kapsayıcısında .NET uygulamasını Azure Service Fabric'e dağıtma
- Docker ile Visual Studio geliştirme sorunlarını giderme
- Visual Studio Container Tools GitHub deposu
- Docker ve küçük kapsayıcıları kullanan GC
- System.IO.IOException: Inotify örneği sayısıyla ilgili yapılandırılan kullanıcı sınırına (128) ulaşıldı
- Docker görüntü güncelleştirmeleri
ASP.NET Core