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 run sü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 run süreye olanak sağlar. Docker modelinde dinamik kod derlemesi gerekmez.

Önkoşullar

Örnek uygulamayı indirme

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 run
    
  • Uygulamayı test http://localhost:5000 etmek 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 aspnetapp
    

    Komut build bağı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 --tty etki.)
    • Çı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:5000 etmek için tarayıcıda 'a gidin.

Bir kapsayıcıda Windows çalıştırma

'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 aspnetapp
    
  • Daha 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 ps kapsayı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 ipconfig IP 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 published
    

    Komut 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.dll
      
    • Linux:

      dotnet published/aspnetapp.dll
      
  • Giriş sayfasını http://localhost:5000 gö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

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: