Visual Studio ASP.NET Core ile kapsayıcı araçları
Visual Studio 2017 ve sonraki sürümler, .net Core 'u hedefleyen ASP.NET Core kapsayıcılı uygulamaları oluşturma, hata ayıklama ve çalıştırma desteği sağlar. hem Windows hem de Linux kapsayıcıları desteklenir.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Önkoşullar
- Docker for Windows
- .net Core platformlar arası geliştirme iş yükü ile 2019 Visual Studio
Yükleme ve kurulum
docker yüklemesi için öncelikle Docker for Windows: yüklemeden önce bilmenizgereken bilgileri gözden geçirin. Sonra, Windows Için Docker'ı yüklemelisiniz.
Docker for Windows içindeki paylaşılan sürücüler , birim eşlemesini ve hata ayıklamayı destekleyecek şekilde yapılandırılmalıdır. sistem tepsisinin docker simgesine sağ tıklayın, Ayarlar' yi seçin 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ümleri 15,6 ve sonraki sürümlerde paylaşılan sürücüler yapılandırılmadığında istem.
Docker kapsayıcısına proje ekleme
ASP.NET Core bir projeyi kapsayıcılı hale getirmek için, projenin .net Core 'u hedeflemesi gerekir. hem Linux hem de Windows kapsayıcıları desteklenir.
bir projeye docker desteği eklerken, Windows ya da Linux kapsayıcısı seçin. Docker ana bilgisayarı aynı kapsayıcı türünü çalıştırıyor olmalıdır. çalışan docker örneğindeki kapsayıcı türünü değiştirmek için, sistem tepsisinin docker simgesine sağ tıklayın ve Windows kapsayıcılar... ' a geçiş yapın veya Linux kapsayıcılarına geçiş yapın....
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çılır listesi bir kapsayıcı türü seçimine izin verir.
Var olan uygulama
.net Core 'u hedefleyen ASP.NET Core projeleri için, araç aracılığıyla docker desteği eklemenin iki seçeneği vardır. Visual Studio ' de projeyi açın ve aşağıdaki seçeneklerden birini belirleyin:
- Project menüsünden docker desteği ' ni seçin.
- Çözüm Gezgini projeye sağ tıklayın ve > Docker desteği Ekle ' yi seçin.
Visual Studio kapsayıcı araçları, .NET Framework hedefleme var olan bir ASP.NET Core projesi için docker eklemeyi desteklemez.
Dockerfile genel bakış
Bir Dockerfile, son bir Docker görüntüsü oluşturmak için tarif, proje köküne eklenir. İçindeki komutları anlamak için Dockerfile başvurusuna bakın. Bu belirli Dockerfile , dört farklı, adlandırılmış derleme aşamaları ile çok aşamalı bir yapı 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 , Microsoft/DotNet görüntüsünü temel alır. bu temel görüntüde ASP.NET Core çalışma zamanı ve NuGet paketleri bulunur. Paketler, başlangıç performansını geliştirmek için derlenen tek zaman (JıT).
Yeni proje iletişim kutusu https Için yapılandırma 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şaretli değilse, HTTP trafiği için tek bir bağlantı noktası (80) gösterilir.
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 , Microsoft/aspnetcore görüntüsünü temel alır. bu temel görüntü, başlangıç performansını geliştirmek için tam zamanında (jıt) derlenen ASP.NET Core NuGet paketlerini içerir.
Bir uygulamaya kapsayıcı Orchestrator desteği ekleme
Visual Studio 2017 sürümleri, tek kapsayıcı düzenleme çözümü olarak Docker Compose 15,7 ya da daha önceki destek. Docker Compose yapıtlar, > Docker desteği Ekle aracılığıyla eklenir.
Visual Studio 2017 sürümleri 15,8 veya sonraki sürümlerde yalnızca sorulduğunda bir orchestration çözümü ekleyin. Çözüm Gezgini ' de projeye sağ tıklayın ve > kapsayıcı Orchestrator desteği Ekle ' yi seçin. Aşağıdaki seçenekler kullanılabilir:
Docker Compose
Visual Studio kapsayıcı araçları, aşağıdaki dosyalarla çözüme bir docker-compose projesi ekler:
- Docker-Compose. dcproj: projeyi temsil eden dosya.
<DockerTargetOS>Kullanılacak işletim sistemini belirleyen bir öğesi içerir. - . dockerıgnore: derleme bağlamı oluşturulurken dışlanacak dosya ve Dizin düzenlerini listeler.
- Docker-Compose. yml: sırasıyla ve ile oluşturulan ve çalıştıran görüntülerin koleksiyonunu tanımlamak için kullanılan temel Docker Compose dosyası
docker-compose builddocker-compose run. - Docker-Compose. override. yml: isteğe bağlı bir dosya, Docker Compose tarafından okunan hizmetler için yapılandırma geçersiz kılmalarıyla.
docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml"bu dosyaları birleştirmek için Visual Studio yürütülür.
Docker-Compose. yml dosyası, proje çalışırken 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 hellodockertools:dev uygulama hata ayıklama modunda çalıştırıldığında görüntüyü oluşturur. hellodockertools:latestUygulama yayın modunda çalıştığında görüntü oluşturulur.
Görüntü kayıt defterine itilse, görüntü adını Docker Hub Kullanıcı adı (örneğin,) ile önek yapın dockerhubusername/hellodockertools . Alternatif olarak, yapılandırmaya bağlı olarak, görüntü adını özel kayıt defteri URL 'sini (örneğin,) içerecek şekilde değiştirin privateregistry.domain.com/hellodockertools .
Yapı yapılandırmasına (örneğin, hata ayıklama veya sürüm) göre farklı davranışlar istiyorsanız, yapılandırmaya özgü Docker-Compose dosyaları ekleyin. Dosyalar derleme yapılandırmasına göre adlandırılmalıdır (örneğin, Docker-Compose. vs. Debug. yıml ve Docker-Compose. vs. Release. yıml) ve Docker-Compose-override. yıml dosyasıyla aynı konuma yerleştirildi.
Yapılandırmaya özgü geçersiz kılma dosyalarını kullanarak, hata ayıklama ve yayın derleme yapılandırmaları için farklı yapılandırma ayarları (ortam değişkenleri veya giriş noktaları gibi) belirtebilirsiniz.
Docker Compose Visual Studio çalıştırma seçeneği göstermek için, Docker projesinin başlangıç projesi olması gerekir.
Service Fabric
temel önkoşullaraek olarak, Service Fabric orchestration çözümü aşağıdaki önkoşulları ister:
- Microsoft Azure Service Fabric SDK sürüm 2,6 veya üzeri
- Visual Studio Azure geliştirme iş yükü
Service Fabric, Windows yerel geliştirme kümesinde Linux kapsayıcıları çalıştırmayı desteklemez. proje zaten bir Linux kapsayıcısı kullanıyorsa, Visual Studio Windows kapsayıcılara geçiş yapmanızı ister.
Visual Studio kapsayıcı araçları aşağıdaki görevleri yapılır:
çözüme bir < project_name > uygulaması Service Fabric uygulama projesi ekler.
ASP.NET Core projesine bir dockerfile ve . dockerıgnore dosyası ekler. ASP.NET Core projesinde zaten bir dockerfile varsa, dockerfile. orijinal 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"]<IsServiceFabricServiceProject>ASP.NET Core projenin . csproj dosyasına bir öğ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. Azure Service Fabric 'de bir Windows kapsayıcısında .net uygulaması dağıtma.
Hata Ayıklama
Araç çubuğundaki hata ayıklama açılır listesinden Docker ' ı seçin ve uygulamada hata ayıklamayı başlatın. Çıkış penceresinin Docker görünümü aşağıdaki işlemleri gerçekleşirken gösterir:
- Microsoft/DotNet çalışma zamanı görüntüsünün 2,1-aspnetcore-Runtime etiketi elde edilir (zaten önbellekte değilse). Görüntüde ASP.NET Core ve .NET Core çalışma zamanları ile ilişkili Kitaplıklar yüklenir. üretimde ASP.NET Core uygulamaları çalıştırmak için en iyi duruma getirilmiştir.
ASPNETCORE_ENVIRONMENTOrtam değişkeni kapsayıcı içinde olarak ayarlanırDevelopment.- Dinamik olarak atanan iki bağlantı noktası sunulur: bir HTTP ve diğeri HTTPS için. Localhost 'a atanan bağlantı noktası
docker pskomutla 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 elde edilen Docker görüntüsü dev olarak etiketlendi. Görüntü, Microsoft/DotNet temel görüntüsünün 2,1-aspnetcore-Runtime etiketine dayalıdır. docker images Paket Yöneticisi konsolu (PMC) penceresinde komutu ç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ındı (zaten önbellekte yoksa).
ASPNETCORE_ENVIRONMENTOrtam değişkeni kapsayıcı içinde olarak ayarlanırDevelopment.- 80 numaralı bağlantı noktası, localhost için dinamik olarak atanmış bir bağlantı noktasıyla gösterilir ve eşleştirilir. Bağlantı noktası Docker ana bilgisayarı tarafından belirlenir ve
docker pskomutla 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 elde edilen Docker görüntüsü dev olarak etiketlendi. Görüntü, Microsoft/aspnetcore temel görüntüsünü temel alır. docker images Paket Yöneticisi konsolu (PMC) penceresinde komutu ç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ının, yinelemeli deneyim sağlamak için birim bağlama kullanması nedeniyle geliştirme görüntüsünde uygulama içeriği eksik. Bir görüntüyü göndermek için yayın yapılandırmasını kullanın.
docker psKomutu PMC 'de çalıştırın. Uygulamanın, kapsayıcıyı kullanarak çalıştığını unutmayın:
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 görünümlerde yapılan değişiklikler Razor , derleme adımına gerek kalmadan otomatik olarak güncelleştirilir. Güncelleştirmeyi görüntülemek için değişikliği yapıp tarayıcıyı kaydedin ve yenileyin.
Kod dosyası değişiklikleri derleme ve kapsayıcının içinde yeniden başlatma gerektirir Kestrel . Değişikliği yaptıktan sonra, CTRL+F5 işlemi gerçekleştirmek ve uygulamayı kapsayıcı içinde başlatmak için öğesini kullanın. Docker kapsayıcısı yeniden derlenmez veya durdurulmaz. docker psKomutu PMC 'de çalıştırın. Özgün kapsayıcının 10 dakikadan önce çalışmaya devam ettiğini fark 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ünü tamamladıktan sonra, Visual Studio kapsayıcı araçları uygulamanın üretim görüntüsünü oluşturmaya yardımcı olur. Yapılandırma açılır öğesini değiştirerek uygulamayı serbest bırakın ve oluşturun. Araç, Docker Hub 'dan (zaten önbellekte değilse) derleme/yayımlama görüntüsünü alır. Bir görüntü, özel kayıt defterine veya Docker Hub 'ına gönderilebilecek en son etiketle oluşturulur.
docker imagesGörüntülerin listesini görmek için bu komutu PMC 'de çalıştırın. Aşağıdakine benzer bir çıktı 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 microsoft/aspnetcore Önceki çıktıda listelenen ve görüntüleri microsoft/dotnet .NET Core 2,1 ' deki görüntülerle değiştirilmiştir. Daha fazla bilgi için bkz. Docker depoları geçiş duyurusu.
Not
docker imagesKomut, havuz adları ve etiketleri <none> (Yukarıda listelenmeyen) ile tanımlanmış olan aracı görüntülerini döndürür. Bu adlandırılmamış görüntüler, çok aşamalı derleme dockerfile tarafından üretilir. Son görüntünün oluşturulması verimliliği artırır — ancak 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ı için bir beklentisi olabilir. Birim eşleme nedeniyle, hata ayıklayıcı ve uygulama, kapsayıcıda değil, yerel makineden çalıştırılıyor. En son görüntü, uygulamayı bir konak makinesinde çalıştırmak için gerekli uygulama kodunu paketlendi. 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 bir .net uygulamasını Azure Service Fabric dağıtma
- Docker ile Visual Studio geliştirme sorunlarını giderme
- Visual Studio kapsayıcı araçları GitHub deposu
- Docker ve küçük kapsayıcılar kullanılarak GC