Migrowanie aplikacji ASP.NET MVC do kontenerów systemu WindowsMigrating ASP.NET MVC Applications to Windows Containers

Uruchamianie istniejącej aplikacji opartej na .NET Framework w kontenerze systemu Windows nie wymaga wprowadzania żadnych zmian w aplikacji.Running an existing .NET Framework-based application in a Windows container doesn't require any changes to your app. Aby uruchomić aplikację w kontenerze systemu Windows, należy utworzyć obraz platformy Docker zawierający aplikację i uruchomić kontener.To run your app in a Windows container you create a Docker image containing your app and start the container. W tym temacie wyjaśniono, jak zastosować istniejącą aplikację ASP.NET MVC i wdrożyć ją w kontenerze systemu Windows.This topic explains how to take an existing ASP.NET MVC application and deploy it in a Windows container.

Zacznij od istniejącej aplikacji ASP.NET MVC, a następnie Kompiluj opublikowane elementy zawartości przy użyciu programu Visual Studio.You start with an existing ASP.NET MVC app, then build the published assets using Visual Studio. Użyj platformy Docker, aby utworzyć obraz, który zawiera i uruchomi aplikację.You use Docker to create the image that contains and runs your app. Przejdź do lokacji działającej w kontenerze systemu Windows i sprawdź, czy aplikacja działa.You'll browse to the site running in a Windows container and verify the app is working.

W tym artykule przyjęto założenie, że masz podstawową wiedzą dotyczącą platformy Docker.This article assumes a basic understanding of Docker. Aby uzyskać informacje dotyczące platformy Docker, przeczytaj artykuł Docker Overview (Przegląd platformy Docker).You can learn about Docker by reading the Docker Overview.

Aplikacja, która zostanie uruchomiona w kontenerze, jest prostą witryną sieci Web, która umożliwia losowe odpowiedzi na pytania.The app you'll run in a container is a simple website that answers questions randomly. Ta aplikacja jest podstawową aplikacją MVC bez uwierzytelniania ani magazynu bazy danych. umożliwia skoncentrowanie się na przenoszeniu warstwy sieci Web do kontenera.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. W przyszłości tematy pokazują, jak przenieść magazyn trwały i zarządzać nim w aplikacjach kontenerowych.Future topics will show how to move and manage persistent storage in containerized applications.

Przeniesienie aplikacji obejmuje następujące kroki:Moving your application involves these steps:

  1. Tworzenie zadania publikowania w celu skompilowania zasobów dla obrazu.Creating a publish task to build the assets for an image.
  2. Tworzenie obrazu platformy Docker, na którym będzie uruchamiana aplikacja.Building a Docker image that will run your application.
  3. Uruchamianie kontenera platformy Docker z uruchomionym obrazem.Starting a Docker container that runs your image.
  4. Weryfikowanie aplikacji przy użyciu przeglądarki.Verifying the application using your browser.

Gotowa aplikacja znajduje się w serwisie GitHub.The finished application is on GitHub.

Wymagania wstępnePrerequisites

Komputer deweloperski musi mieć następujące oprogramowanie:The development machine must have the following software:

Important

Jeśli używasz systemu Windows Server 2016, postępuj zgodnie z instrukcjami dotyczącymi wdrażania hosta kontenerów — Windows Server.If you are using Windows Server 2016, follow the instructions for Container Host Deployment - Windows Server.

Po zainstalowaniu i uruchomieniu programu Docker kliknij prawym przyciskiem myszy jego ikonę na pasku zadań i wybierz pozycję Switch to Windows containers (Przełącz na kontenery systemu Windows).After installing and starting Docker, right-click on the tray icon and select Switch to Windows containers. Jest to wymagane do uruchomienia obrazów Docker opartych na systemie Windows.This is required to run Docker images based on Windows. Wykonanie tego polecenia może potrwać kilka sekund:This command takes a few seconds to execute:

Kontener systemu WindowsWindows Container

Publikuj skryptPublish script

Zbierz w jednym miejscu wszystkie elementy zawartości konieczne do załadowania do obrazu Docker.Collect all the assets that you need to load into a Docker image in one place. Możesz użyć polecenia Opublikuj Visual Studio, aby utworzyć profil publikacji dla aplikacji.You can use the Visual Studio Publish command to create a publish profile for your app. Ten profil umieści wszystkie zasoby w jednym drzewie katalogów, które zostaną skopiowane do obrazu docelowego w dalszej części tego samouczka.This profile will put all the assets in one directory tree that you copy to your target image later in this tutorial.

Kroki publikowaniaPublish Steps

  1. Kliknij prawym przyciskiem myszy projekt sieci Web w programie Visual Studio, a następnie wybierz pozycję Publikuj.Right click on the web project in Visual Studio, and select Publish.
  2. Kliknij przycisk profil niestandardowy, a następnie wybierz opcję system plików jako metodę.Click the Custom profile button, and then select File System as the method.
  3. Wybierz katalog.Choose the directory. Zgodnie z Konwencją pobrany przykład używa bin\Release\PublishOutput .By convention, the downloaded sample uses bin\Release\PublishOutput.

Publikuj połączeniePublish Connection

Otwórz sekcję Opcje publikowania plików na karcie Ustawienia . Wybierz opcję prekompilowanie podczas publikowania.Open the File Publish Options section of the Settings tab. Select Precompile during publishing. Ta optymalizacja oznacza, że zostaną skompilowane widoki w kontenerze platformy Docker, kopiując wstępnie skompilowane widoki.This optimization means that you'll be compiling views in the Docker container, you are copying the precompiled views.

Ustawienia publikowaniaPublish Settings

Kliknij przycisk Publikuj, a program Visual Studio skopiuje wszystkie zasoby, których potrzebujesz do folderu docelowego.Click Publish, and Visual Studio will copy all the needed assets to the destination folder.

Tworzenie obrazuBuild the image

Utwórz nowy plik o nazwie pliku dockerfile , aby zdefiniować obraz platformy Docker.Create a new file named Dockerfile to define your Docker image. Pliku dockerfile zawiera instrukcje dotyczące tworzenia końcowego obrazu i zawiera wszystkie podstawowe nazwy obrazów, wymagane składniki, aplikację, którą chcesz uruchomić, oraz inne obrazy konfiguracyjne.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. Pliku dockerfile to dane wejściowe docker build polecenia, które tworzy obraz.Dockerfile is the input to the docker build command that creates the image.

W tym ćwiczeniu utworzysz obraz na podstawie microsoft/aspnet obrazu znajdującego się w usłudze Docker Hub.For this exercise, you will build an image based on the microsoft/aspnet image located on Docker Hub. Obraz podstawowy, microsoft/aspnet , jest obrazem systemu Windows Server.The base image, microsoft/aspnet, is a Windows Server image. Zawiera on systemy Windows Server Core, IIS i ASP.NET 4.7.2.It contains Windows Server Core, IIS, and ASP.NET 4.7.2. Po uruchomieniu tego obrazu w kontenerze zostaną automatycznie uruchomione usługi IIS i zainstalowane witryny sieci Web.When you run this image in your container, it will automatically start IIS and installed websites.

Pliku dockerfile tworzący obraz wygląda następująco: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

W tym pliku Dockerfile nie ma polecenia ENTRYPOINT.There is no ENTRYPOINT command in this Dockerfile. Nie jest ono potrzebne.You don't need one. W przypadku korzystania z systemu Windows Server z usługami IIS proces usług IIS jest punktem wejścia, który jest konfigurowany do uruchamiania na podstawowym obrazie ASPNET.When running Windows Server with IIS, the IIS process is the entrypoint, which is configured to start in the aspnet base image.

Uruchom polecenie Docker Build, aby utworzyć obraz z uruchomioną aplikacją ASP.NET.Run the Docker build command to create the image that runs your ASP.NET app. W tym celu Otwórz okno programu PowerShell w katalogu projektu i wpisz następujące polecenie w katalogu rozwiązania: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 .

To polecenie spowoduje skompilowanie nowego obrazu przy użyciu instrukcji w pliku dockerfile, nadawanie nazwy (-t znakowanie) obrazu jako mvcrandomanswers.This command will build the new image using the instructions in your Dockerfile, naming (-t tagging) the image as mvcrandomanswers. Może to obejmować ściąganie obrazu podstawowego z usługi Docker Hub, a następnie dodanie aplikacji do tego obrazu.This may include pulling the base image from Docker Hub, and then adding your app to that image.

Po zakończeniu tego polecenia można uruchomić docker images polecenie, aby wyświetlić informacje o nowym obrazie: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

Identyfikator obrazu będzie różny na twoim komputerze.The IMAGE ID will be different on your machine. Teraz Uruchommy aplikację.Now, let's run the app.

Uruchamianie konteneraStart a container

Uruchom kontener, wykonując następujące docker run polecenie:Start a container by executing the following docker run command:

docker run -d --name randomanswers mvcrandomanswers

-dArgument informuje platformę Docker o uruchomieniu obrazu w trybie odłączonym.The -d argument tells Docker to start the image in detached mode. Oznacza to, że obraz platformy Docker zostanie rozłączony z bieżącą powłoką.That means the Docker image runs disconnected from the current shell.

W wielu przykładach platformy Docker można zobaczyć-p, aby zmapować kontener i porty hosta.In many docker examples, you may see -p to map the container and host ports. Domyślny obraz ASPNET już skonfigurował kontener do nasłuchiwania na porcie 80 i uwidaczniania go.The default aspnet image has already configured the container to listen on port 80 and expose it.

--name randomanswersNadaje nazwę uruchomionemu kontenerowi.The --name randomanswers gives a name to the running container. W większości poleceń można użyć tej nazwy zamiast identyfikatora kontenera.You can use this name instead of the container ID in most commands.

mvcrandomanswersJest nazwą obrazu, który ma zostać uruchomiony.The mvcrandomanswers is the name of the image to start.

Weryfikowanie w przeglądarceVerify in the browser

Po rozpoczęciu kontenera Nawiąż połączenie z uruchomionym kontenerem, korzystając http://localhost z podanego przykładu.Once the container starts, connect to the running container using http://localhost in the example shown. Wpisz ten adres URL w przeglądarce i zobacz działającą lokację.Type that URL into your browser, and you should see the running site.

Note

Niektóre oprogramowanie sieci VPN lub serwera proxy może uniemożliwić przechodzenie do witryny.Some VPN or proxy software may prevent you from navigating to your site. Możesz tymczasowo ją wyłączyć, aby upewnić się, że kontener działa.You can temporarily disable it to make sure your container is working.

Przykładowy katalog w witrynie GitHub zawiera skrypt programu PowerShell , który wykonuje te polecenia.The sample directory on GitHub contains a PowerShell script that executes these commands for you. Otwórz okno programu PowerShell, Zmień katalog na katalog rozwiązania, a następnie wpisz:Open a PowerShell window, change directory to your solution directory, and type:

./run.ps1

Powyższe polecenie kompiluje obraz, wyświetla listę obrazów na komputerze i uruchamia kontener.The command above builds the image, displays the list of images on your machine, and starts a container.

Aby zatrzymać kontener, wydaj docker stop polecenie:To stop your container, issue a docker stop command:

docker stop randomanswers

Aby usunąć kontener, wydaj docker rm polecenie:To remove the container, issue a docker rm command:

docker rm randomanswers