ASP.NET Core için Docker görüntüleri
Bu öğreticide, Docker kapsayıcılarında ASP.NET Core uygulama çalıştırmayı gösterir.
Bu öğreticide şunları yaptınız:
- Docker görüntülerini ASP.NET Core öğrenin
- Örnek ASP.NET Core indirme
- Örnek uygulamayı yerel olarak çalıştırma
- Örnek uygulamayı Linux kapsayıcılarında çalıştırma
- Örnek uygulamayı kapsayıcılarda Windows çalıştırma
- El ile derleme ve dağıtma
ASP.NET Core Docker görüntüleri
Bu öğretici için bir örnek uygulama ASP.NET Core docker kapsayıcılarında çalıştırabilirsiniz. Örnek hem Linux hem de Windows çalışır.
Örnek Dockerfile, farklı kapsayıcılarda derlemek ve çalıştırmak için Docker çok aşamalı derleme özelliğini kullanır. Derleme ve çalıştırma kapsayıcıları, Microsoft tarafından Docker Hub oluşturulur:
dotnet/sdkÖrnek, uygulamayı inşa için bu görüntüyü kullanır. Görüntü, Komut Satırı Araçlarını (CLI) içeren .NET SDK'sı içerir. Görüntü yerel geliştirme, hata ayıklama ve birim testi için en iyi duruma getirilmiş. Geliştirme ve derleme için yüklenmiş araçlar görüntüyü görece büyük hale gösterir.
dotnet/core/sdkÖrnek, uygulamayı inşa için bu görüntüyü kullanır. Görüntüde Komut .NET Core SDK (CLI) içeren komut dosyası yer alır. Görüntü yerel geliştirme, hata ayıklama ve birim testi için en iyi duruma getirilmiş. Geliştirme ve derleme için yüklenmiş araçlar görüntüyü görece büyük hale gösterir.
dotnet/aspnetÖrnek, uygulamayı çalıştırma için bu görüntüyü kullanır. Görüntü, çalışma ASP.NET Core kitaplıklarını içerir ve uygulamaları üretimde çalıştırmaya uygun şekilde iyileştirilmiştir. Dağıtım ve uygulama başlatma hızı için tasarlanan görüntü görece küçük olduğundan Docker Registry'den Docker ana bilgisayarına ağ performansı iyileştirilmiş olur. Yalnızca bir uygulamayı çalıştırmak için gereken ikili dosyalar ve içerik kapsayıcıya kopyalanır. İçerikler çalıştırmaya hazır ve uygulama başlatmadan en hızlı
docker runsüreye olanak sağlar. Docker modelinde dinamik kod derlemesi gerekmez.
dotnet/core/aspnetÖrnek, uygulamayı çalıştırma için bu görüntüyü kullanır. Görüntü, çalışma ASP.NET Core kitaplıklarını içerir ve uygulamaları üretimde çalıştırmaya uygun şekilde iyileştirilmiştir. Dağıtım ve uygulama başlatma hızı için tasarlanan görüntü görece küçük olduğundan Docker Registry'den Docker ana bilgisayarına ağ performansı iyileştirilmiş olur. Yalnızca bir uygulamayı çalıştırmak için gereken ikili dosyalar ve içerik kapsayıcıya kopyalanır. İçerikler çalıştırmaya hazır ve uygulama başlatmadan en hızlı
docker runsüreye olanak sağlar. Docker modelinde dinamik kod derlemesi gerekmez.
Önkoşullar
Docker istemcisi 18.03 veya sonraki bir
Örnek uygulamayı indirme
.NET Docker deposunu kopyaarak örneği indirin:
git clone https://github.com/dotnet/dotnet-docker
Uygulamayı yerel olarak çalıştırma
dotnet-docker/samples/aspnetapp/aspnetapp klasöründeki proje klasörüne gidin.
Uygulamayı yerel olarak derlemek ve çalıştırmak için aşağıdaki komutu çalıştırın:
dotnet runUygulamayı test
http://localhost:5000etmek için tarayıcıda 'a gidin.Uygulamayı durdurmak için komut isteminde Ctrl+C tuşlarına basın.
Linux kapsayıcısı içinde çalıştırma
Docker istemcisinde Linux kapsayıcılara geçiş.
dotnet-docker/samples/aspnetapp'te Dockerfile klasörüne gidin.
Örneği Docker'da derlemek ve çalıştırmak için aşağıdaki komutları çalıştırın:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetappKomut
buildbağımsız değişkenleri:- Görüntüye aspnetapp adını verin.
- Geçerli klasörde (sonundaki nokta) Dockerfile dosyasını arama.
Çalıştır komutu bağımsız değişkenleri:
- Sözde TTY ayırma ve bağlı bile olsa açık tut. (ile aynı
--interactive --ttyetki.) - Çıkış sırasında kapsayıcıyı otomatik olarak kaldırın.
- Yerel makinede 5000 bağlantı noktasını kapsayıcının 80. bağlantı noktasına eşler.
- Kapsayıcıyı aspnetcore_sample.
- aspnetapp görüntüsünü belirtin.
Uygulamayı test
http://localhost:5000etmek için tarayıcıda 'a gidin.
Bir kapsayıcıda Windows çalıştırma
- Docker istemcisinde kapsayıcılara Windows.
'de docker dosya klasörüne dotnet-docker/samples/aspnetapp gidin.
Örneği Docker'da derlemek ve çalıştırmak için aşağıdaki komutları çalıştırın:
docker build -t aspnetapp . docker run -it --rm --name aspnetcore_sample aspnetappDaha Windows kapsayıcılar için kapsayıcının IP adresine ihtiyacınız vardır
http://localhost:5000(gözatma özelliği işe olmayacaktır):Başka bir komut istemi açın.
Çalışan
docker pskapsayıcıları görmek için çalıştırın. "aspnetcore_sample" kapsayıcının orada olduğunu doğrulayın.Kapsayıcının
docker exec aspnetcore_sample ipconfigIP adresini görüntülemek için çalıştırın. Komutun çıktısı şu örnekteki gibi olur:Ethernet adapter Ethernet: Connection-specific DNS Suffix . : contoso.com Link-local IPv6 Address . . . . . : fe80::1967:6598:124:cfa3%4 IPv4 Address. . . . . . . . . . . : 172.29.245.43 Subnet Mask . . . . . . . . . . . : 255.255.240.0 Default Gateway . . . . . . . . . : 172.29.240.1
Kapsayıcı IPv4 adresini (örneğin, 172.29.245.43) kopyalayın ve uygulamayı test etmek için tarayıcı adres çubuğuna yapıştırın.
El ile derleme ve dağıtma
Bazı senaryolarda, çalışma zamanında gerekli olan varlıklarını kopyalayıp bir uygulamayı kapsayıcıya dağıtmak istiyor olabilirsiniz. Bu bölümde el ile dağıtmayı gösterir.
dotnet-docker/samples/aspnetapp/aspnetapp klasöründeki proje klasörüne gidin.
dotnet publish çalıştırın:
dotnet publish -c Release -o publishedKomut bağımsız değişkenleri:
- Uygulamayı yayın modunda derleme (varsayılan ayar hata ayıklama modudur).
- Varlıkları yayımlanan klasörde oluşturun.
Uygulamayı çalıştırın.
Windows:
dotnet published\aspnetapp.dllLinux:
dotnet published/aspnetapp.dll
Giriş sayfasını
http://localhost:5000görmek için sayfasına göz atın.
El ile yayımlanan uygulamayı bir Docker kapsayıcısı içinde kullanmak için yeni bir Dockerfile oluşturun ve komutunu docker build . kullanarak bir görüntü oluşturun.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Yeni görüntüyü görmek için komutunu docker images kullanın.
The Dockerfile
Daha önce komutunuz tarafından kullanılan Dockerfile docker build aşağıdaki şekildedir. Derleme dotnet publish ve dağıtma için bu bölümdekiyle aynı şekilde kullanır.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Yukarıdaki Dockerfile dosyasında, *.csproj dosyalar ayrı katmanlar olarak kopyalanır ve geri yüklenir. Komut docker build bir görüntü derlemek için yerleşik önbellek kullanır. Komut *.csproj son çalıştırılana kadar dosyalar docker build değişmemişse, dotnet restore komutun yeniden çalışmasına gerek yok. Bunun yerine ilgili katman için yerleşik dotnet restore önbellek yeniden kullanılır. Daha fazla bilgi için bkz. Dockerfiles yazmaya yönelik en iyi yöntemler.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
The Dockerfile
Daha önce komutunuz tarafından kullanılan Dockerfile docker build aşağıdaki şekildedir. Derleme dotnet publish ve dağıtma için bu bölümdekiyle aynı şekilde kullanır.
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Önceki Dockerfile dosyasında belirtildiği gibi dosyalar *.csproj ayrı katmanlar olarak kopyalanır ve geri yüklenir. Komut docker build bir görüntü derlemek için yerleşik önbellek kullanır. Komut *.csproj son çalıştırılana kadar dosyalar docker build değişmemişse, dotnet restore komutun yeniden çalışmasına gerek yok. Bunun yerine ilgili katman için yerleşik dotnet restore önbellek yeniden kullanılır. Daha fazla bilgi için bkz. Dockerfiles yazmaya yönelik en iyi yöntemler.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/aspnetapp.dll ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
The Dockerfile
Daha önce komutunuz tarafından kullanılan Dockerfile docker build aşağıdaki şekildedir. Derleme dotnet publish ve dağıtma için bu bölümdekiyle aynı şekilde kullanır.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Ek kaynaklar
- Docker build komutu
- Docker run komutu
- ASP.NET Core Docker örneği (Bu öğreticide kullanılan örnek.)
- Yapılandırma ASP.NET Core sunucuları ve yük dengeciler ile çalışacak şekilde yapılandırma
- Visual Studio Docker Araçları ile çalışma
- Visual Studio Code ile hata ayıklama
- Docker ve küçük kapsayıcılar kullanan GC
Sonraki adımlar
Örnek uygulamayı içeren Git deposu da belgeleri içerir. Depoda bulunan kaynaklara genel bakış için README dosyasına bakın. Özellikle HTTPS'nin nasıl uygulandığını öğrenin: