ASP.NET Core ile Visual Studio Kapsayıcı Araçları

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.

Dialog to select local C drive sharing for containers

Bahşiş

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:

Enable Docker Support checkbox

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 runile docker-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ı olan 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:

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>ApplicationService 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 olarak Development 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 olarak Development 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

Dekont

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.

Dekont

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ı derlemeDockerfile 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