ASP.NET MVC Uygulamalarını Windows Kapsayıcılarına GeçirmeMigrating ASP.NET MVC Applications to Windows Containers

Bir Windows kapsayıcısında mevcut .NET Framework tabanlı bir uygulamayı çalıştırmak için uygulamanızda herhangi bir değişiklik yapılması gerekmez.Running an existing .NET Framework-based application in a Windows container doesn't require any changes to your app. Uygulamanızı bir Windows kapsayıcısında çalıştırmak için uygulamanızı içeren bir Docker görüntüsü oluşturun ve kapsayıcıyı başlatın.To run your app in a Windows container you create a Docker image containing your app and start the container. Bu konu başlığı altında, var olan bir ASP.NET MVC uygulamasının nasıl yapılacağı ve bir Windows kapsayıcısında nasıl dağıtılacağı açıklanmaktadır.This topic explains how to take an existing ASP.NET MVC application and deploy it in a Windows container.

Mevcut bir ASP.NET MVC uygulamasıyla başlayın ve ardından Visual Studio 'Yu kullanarak yayımlanmış varlıkları derleyin.You start with an existing ASP.NET MVC app, then build the published assets using Visual Studio. Uygulamanızı içeren ve çalıştıran görüntüyü oluşturmak için Docker 'ı kullanırsınız.You use Docker to create the image that contains and runs your app. Bir Windows kapsayıcısında çalışan siteye gözatıp uygulamanın çalıştığını doğrularsınız.You'll browse to the site running in a Windows container and verify the app is working.

Bu makale Docker hakkında temel bir anlayışınızın olduğunu varsayar.This article assumes a basic understanding of Docker. Docker’a Genel Bakış makalesini okuyarak Docker hakkında bilgi edinebilirsiniz.You can learn about Docker by reading the Docker Overview.

Bir kapsayıcıda çalıştıracağınız uygulama, soruları rastgele cevapladığı basit bir Web sitesidir.The app you'll run in a container is a simple website that answers questions randomly. Bu uygulama, kimlik doğrulaması veya veritabanı depolaması olmayan temel bir MVC uygulamasıdır; Web katmanını bir kapsayıcıya taşımaya odaklanmanızı sağlar.This app is a basic MVC application with no authentication or database storage; it lets you focus on moving the web tier to a container. Sonraki konularda, Kapsayıcılı uygulamalarda kalıcı depolamayı nasıl taşıyacağınız ve yöneteceğiniz gösterilmektedir.Future topics will show how to move and manage persistent storage in containerized applications.

Uygulamanızı taşımak şu adımları içerir:Moving your application involves these steps:

  1. Bir görüntü için varlıklar oluşturmak üzere bir Yayımla görevi oluşturma.Creating a publish task to build the assets for an image.
  2. Uygulamanızı çalıştıracak bir Docker görüntüsü oluşturma.Building a Docker image that will run your application.
  3. Görüntünüzü çalıştıran bir Docker kapsayıcısı başlatılıyor.Starting a Docker container that runs your image.
  4. Tarayıcınız kullanılarak uygulama doğrulanıyor.Verifying the application using your browser.

Tamamlanmış uygulama GitHub üzerinde.The finished application is on GitHub.

Ön koşullarPrerequisites

Geliştirme makinesi aşağıdaki yazılıma sahip olmalıdır:The development machine must have the following software:

Important

Windows Server 2016 kullanıyorsanız kapsayıcı ana bilgisayar dağıtımı-Windows Serveryönergelerini izleyin.If you are using Windows Server 2016, follow the instructions for Container Host Deployment - Windows Server.

Docker’ı yükleyip başlattıktan sonra tepsi simgesine sağ tıklayıp Windows kapsayıcılarına geç öğesini seçin.After installing and starting Docker, right-click on the tray icon and select Switch to Windows containers. Bu işlem, Windows temelinde Docker görüntülerini çalıştırmak için gereklidir.This is required to run Docker images based on Windows. Bu komutun yürütülmesi birkaç saniye sürer:This command takes a few seconds to execute:

Windows kapsayıcısıWindows Container

Betiği YayımlaPublish script

Bir Docker görüntüsüne yüklemeniz gereken tüm varlıkları tek bir yerde toplayın.Collect all the assets that you need to load into a Docker image in one place. Uygulamanız için bir yayımlama profili oluşturmak üzere Visual Studio Publish komutunu kullanabilirsiniz.You can use the Visual Studio Publish command to create a publish profile for your app. Bu profil, bu öğreticide daha sonra hedef yansımanıza kopyaladığınız bir dizin ağacındaki tüm varlıkları yerleştirir.This profile will put all the assets in one directory tree that you copy to your target image later in this tutorial.

Adımları YayımlaPublish Steps

  1. Visual Studio 'da web projesine sağ tıklayın ve Yayımla' yı seçin.Right click on the web project in Visual Studio, and select Publish.
  2. Özel profil düğmesinetıklayın ve ardından Yöntem olarak dosya sistemi ' ni seçin.Click the Custom profile button, and then select File System as the method.
  3. Dizini seçin.Choose the directory. Kurala göre, indirilen örnek kullanır bin\Release\PublishOutput .By convention, the downloaded sample uses bin\Release\PublishOutput.

Bağlantıyı YayımlaPublish Connection

Ayarlar sekmesinin dosya yayımlama seçenekleri bölümünü açın. Yayınlama sırasında ön derleme' yi seçin.Open the File Publish Options section of the Settings tab. Select Precompile during publishing. Bu iyileştirme, Docker kapsayıcısında görünümleri derlediğiniz, önceden derlenmiş görünümleri kopyaladığınızı gösterir.This optimization means that you'll be compiling views in the Docker container, you are copying the precompiled views.

Yayımlama ayarlarıPublish Settings

Yayımla' ya tıklayın ve Visual Studio gerekli tüm varlıkları hedef klasöre kopyalayacaktır.Click Publish, and Visual Studio will copy all the needed assets to the destination folder.

Görüntü oluşturmaBuild the image

Docker görüntünüzü tanımlamak için dockerfile adlı yeni bir dosya oluşturun.Create a new file named Dockerfile to define your Docker image. Dockerfile , son görüntüyü oluşturmak için yönergeler içerir ve tüm temel görüntü adlarını, gerekli bileşenleri, çalıştırmak istediğiniz uygulamayı ve diğer yapılandırma görüntülerini içerir.Dockerfile contains instructions to build the final image and includes any base image names, required components, the app you want to run, and other configuration images. Dockerfile , docker build görüntüyü oluşturan komutun giriştir.Dockerfile is the input to the docker build command that creates the image.

Bu alıştırmada, microsoft/aspnet Docker Hub 'ındabulunan görüntüye göre bir görüntü oluşturacaksınız.For this exercise, you will build an image based on the microsoft/aspnet image located on Docker Hub. Temel görüntü, microsoft/aspnet bir Windows Server görüntüsüdür.The base image, microsoft/aspnet, is a Windows Server image. Windows Server Core, IIS ve ASP.NET 4.7.2 içerir.It contains Windows Server Core, IIS, and ASP.NET 4.7.2. Bu görüntüyü kapsayıcıda çalıştırdığınızda, IIS ve yüklenen Web sitelerini otomatik olarak başlatır.When you run this image in your container, it will automatically start IIS and installed websites.

Görüntünüzü oluşturan Dockerfile şöyle görünür:The Dockerfile that creates your image looks like this:

# The `FROM` instruction specifies the base image. You are
# extending the `microsoft/aspnet` image.

FROM microsoft/aspnet

# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot

Bu Dockerfile içinde bir ENTRYPOINT komutu yoktur.There is no ENTRYPOINT command in this Dockerfile. Gerekli değildir.You don't need one. IIS ile Windows Server çalıştırırken IIS işlemi, ASPNET temel görüntüsünde başlamak üzere yapılandırılmış giriş noktası olur.When running Windows Server with IIS, the IIS process is the entrypoint, which is configured to start in the aspnet base image.

ASP.NET uygulamanızı çalıştıran görüntüyü oluşturmak için Docker Build komutunu çalıştırın.Run the Docker build command to create the image that runs your ASP.NET app. Bunu yapmak için, projenizin dizininde bir PowerShell penceresi açın ve çözüm dizinine aşağıdaki komutu yazın:To do this, open a PowerShell window in the directory of your project and type the following command in the solution directory:

docker build -t mvcrandomanswers .

Bu komut, Dockerfile içindeki yönergeleri kullanarak yeni görüntüyü oluşturur ve bu görüntüyü mvcrandomanlar olarak adlandırırın.This command will build the new image using the instructions in your Dockerfile, naming (-t tagging) the image as mvcrandomanswers. Bu, temel görüntünün Docker Hub 'ındançekilerek uygulamanızı bu görüntüye ekleyerek içerebilir.This may include pulling the base image from Docker Hub, and then adding your app to that image.

Komut tamamlandıktan sonra, docker images yeni görüntüyle ilgili bilgileri görmek için komutunu çalıştırabilirsiniz:Once that command completes, you can run the docker images command to see information on the new image:

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mvcrandomanswers              latest              86838648aab6        2 minutes ago       10.1 GB

GÖRÜNTÜ KIMLIĞI makinenizde farklı olacak.The IMAGE ID will be different on your machine. Şimdi uygulamayı çalıştıralım.Now, let's run the app.

Bir kapsayıcı başlatmaStart a container

Aşağıdaki komutu yürüterek bir kapsayıcı başlatın docker run :Start a container by executing the following docker run command:

docker run -d --name randomanswers mvcrandomanswers

-dBağımsız değişkeni, Docker 'ın görüntüyü ayrılmış modda başlatmasını söyler.The -d argument tells Docker to start the image in detached mode. Bu, Docker görüntüsünün geçerli kabuktan kesilen şekilde çalıştığı anlamına gelir.That means the Docker image runs disconnected from the current shell.

Birçok Docker örneğinde, kapsayıcıyı ve ana bilgisayar bağlantı noktalarını eşlemek için-p görebilirsiniz.In many docker examples, you may see -p to map the container and host ports. Varsayılan ASPNET görüntüsü, kapsayıcıyı 80 numaralı bağlantı noktasında dinlemek üzere zaten yapılandırdı ve kullanıma sunar.The default aspnet image has already configured the container to listen on port 80 and expose it.

, --name randomanswers Çalışan kapsayıcıya bir ad verir.The --name randomanswers gives a name to the running container. Çoğu komut içinde kapsayıcı KIMLIĞI yerine bu adı kullanabilirsiniz.You can use this name instead of the container ID in most commands.

, mvcrandomanswers Başlatılacak görüntünün adıdır.The mvcrandomanswers is the name of the image to start.

Tarayıcıda doğrulaVerify in the browser

Kapsayıcı başladıktan sonra, gösterilen örnekte kullanarak çalışan kapsayıcıya bağlanın http://localhost .Once the container starts, connect to the running container using http://localhost in the example shown. URL 'YI tarayıcınıza yazın ve çalışan siteyi görmeniz gerekir.Type that URL into your browser, and you should see the running site.

Note

Bazı VPN veya proxy yazılımları sitenizde geziniyor olabilir.Some VPN or proxy software may prevent you from navigating to your site. Kapsayıcının çalıştığından emin olmak için bunu geçici olarak devre dışı bırakabilirsiniz.You can temporarily disable it to make sure your container is working.

GitHub 'daki örnek dizin, sizin için bu komutları yürüten bir PowerShell betiği içerir.The sample directory on GitHub contains a PowerShell script that executes these commands for you. Bir PowerShell penceresi açın, dizini çözüm dizininiz olarak değiştirin ve şunu yazın:Open a PowerShell window, change directory to your solution directory, and type:

./run.ps1

Yukarıdaki komut görüntüyü oluşturur, makinenizde görüntülerin listesini görüntüler ve bir kapsayıcı başlatır.The command above builds the image, displays the list of images on your machine, and starts a container.

Kapsayıcınızı durdurmak için bir komut verin docker stop :To stop your container, issue a docker stop command:

docker stop randomanswers

Kapsayıcıyı kaldırmak için bir docker rm komut verin:To remove the container, issue a docker rm command:

docker rm randomanswers