Migrowanie aplikacji ASP.NET MVC do kontenerów systemu Windows

Uruchamianie istniejącej aplikacji opartej na .NET Framework w kontenerze systemu Windows nie wymaga żadnych zmian w aplikacji. Aby uruchomić aplikację w kontenerze systemu Windows, należy utworzyć obraz platformy Docker zawierający aplikację i uruchomić kontener. W tym temacie wyjaśniono, jak zastosować istniejącą aplikację MVC ASP.NET i wdrożyć ją w kontenerze systemu Windows.

Zaczynasz od istniejącej aplikacji ASP.NET MVC, a następnie kompilujesz opublikowane zasoby przy użyciu programu Visual Studio. Użyj platformy Docker, aby utworzyć obraz zawierający i uruchamiający aplikację. Przejdziesz do witryny uruchomionej w kontenerze systemu Windows i sprawdzisz, czy aplikacja działa.

W tym artykule przyjęto założenie, że masz podstawową wiedzą dotyczącą platformy Docker. Aby uzyskać informacje dotyczące platformy Docker, przeczytaj artykuł Docker Overview (Przegląd platformy Docker).

Aplikacja uruchamiana w kontenerze to prosta witryna internetowa, która odpowiada losowo na pytania. Ta aplikacja jest podstawową aplikacją MVC bez uwierzytelniania ani magazynu bazy danych; pozwala skupić się na przeniesieniu warstwy internetowej do kontenera. W przyszłych tematach pokazano, jak przenosić magazyn trwały i zarządzać nim w aplikacjach konteneryzowanych.

Przeniesienie aplikacji obejmuje następujące kroki:

  1. Tworzenie zadania publikowania w celu skompilowania zasobów dla obrazu.
  2. Tworzenie obrazu platformy Docker, który uruchomi aplikację.
  3. Uruchamianie kontenera platformy Docker, który uruchamia obraz.
  4. Weryfikowanie aplikacji przy użyciu przeglądarki.

Zakończona aplikacja znajduje się w witrynie GitHub.

Wymagania wstępne

Maszyna programowa musi mieć następujące oprogramowanie:

Ważne

Jeśli używasz Windows Server 2016, postępuj zgodnie z instrukcjami dotyczącymi wdrażania hosta kontenera — 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). Jest to wymagane do uruchomienia obrazów Docker opartych na systemie Windows. Wykonanie tego polecenia trwa kilka sekund:

kontenera systemu WindowsPrzełącznik

Publikowanie skryptu

Zbierz w jednym miejscu wszystkie elementy zawartości konieczne do załadowania do obrazu Docker. Aby utworzyć profil publikowania aplikacji, możesz użyć polecenia Publish programu Visual Studio. Ten profil spowoduje umieszczenie wszystkich zasobów w jednym drzewie katalogów skopiowanych do obrazu docelowego w dalszej części tego samouczka.

Kroki publikowania

  1. Kliknij prawym przyciskiem myszy projekt internetowy w programie Visual Studio, a następnie wybierz pozycję Publikuj.
  2. Kliknij przycisk Profil niestandardowy, a następnie wybierz pozycję System plików jako metodę.
  3. Wybierz katalog. Zgodnie z konwencją pobrany przykład używa metody bin\Release\PublishOutput.

Publikowanie połączenia

Otwórz sekcję Opcje publikowania plików na karcie Ustawienia . Wybierz pozycję Prekompiluj podczas publikowania. Ta optymalizacja oznacza, że będziesz kompilować widoki w kontenerze platformy Docker, kopiujesz wstępnie skompilowane widoki.

Ustawienia publikowania ustawień

Kliknij pozycję Publikuj, a program Visual Studio skopiuje wszystkie potrzebne zasoby do folderu docelowego.

Tworzenie obrazu

Utwórz nowy plik o nazwie Dockerfile , aby zdefiniować obraz platformy Docker. Plik Dockerfile zawiera instrukcje tworzenia obrazu końcowego i zawiera wszystkie nazwy obrazów podstawowych, wymagane składniki, aplikację, którą chcesz uruchomić, oraz inne obrazy konfiguracji. Plik Dockerfile to dane wejściowe docker build polecenia, które tworzy obraz.

W tym ćwiczeniu utworzysz obraz na podstawie obrazu znajdującego microsoft/aspnet się na Docker Hub. Obraz podstawowy, microsoft/aspnet, jest obrazem systemu Windows Server. Zawiera on systemy Windows Server Core, IIS i ASP.NET 4.7.2. Po uruchomieniu tego obrazu w kontenerze program automatycznie uruchomi usługi IIS i zainstalowane witryny internetowe.

Plik Dockerfile, który tworzy obraz, wygląda następująco:

# 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. Nie jest ono potrzebne. W przypadku uruchamiania systemu Windows Server z usługami IIS proces usług IIS jest punktem wejścia skonfigurowanym do uruchomienia w obrazie podstawowym aspnet.

Uruchom polecenie kompilacji platformy Docker, aby utworzyć obraz, który uruchamia aplikację ASP.NET. W tym celu otwórz okno programu PowerShell w katalogu projektu i wpisz następujące polecenie w katalogu rozwiązania:

docker build -t mvcrandomanswers .

To polecenie skompiluje nowy obraz przy użyciu instrukcji w pliku Dockerfile, nazewnictwa (-t tagowania) obrazu jako mvcrandomanswers. Może to obejmować ściąganie obrazu podstawowego z Docker Hub, a następnie dodawanie aplikacji do tego obrazu.

Po zakończeniu docker images tego polecenia możesz uruchomić polecenie , aby wyświetlić informacje o nowym obrazie:

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

Identyfikator obrazu będzie inny na maszynie. Teraz uruchomimy aplikację.

Uruchamianie kontenera

Uruchom kontener, wykonując następujące docker run polecenie:

docker run -d --name randomanswers mvcrandomanswers

Argument -d informuje platformę Docker o uruchomieniu obrazu w trybie odłączonym. Oznacza to, że obraz platformy Docker jest odłączony od bieżącej powłoki.

W wielu przykładach platformy Docker można zobaczyć -p, aby zamapować kontener i porty hosta. Domyślny obraz aspnet skonfigurował już kontener do nasłuchiwania na porcie 80 i uwidacznia go.

Element --name randomanswers zawiera nazwę uruchomionego kontenera. Możesz użyć tej nazwy zamiast identyfikatora kontenera w większości poleceń.

Jest mvcrandomanswers to nazwa obrazu do uruchomienia.

Weryfikowanie w przeglądarce

Po uruchomieniu kontenera połącz się z uruchomionym kontenerem przy użyciu http://localhost w pokazanym przykładzie. Wpisz ten adres URL w przeglądarce i powinien zostać wyświetlona uruchomiona witryna.

Uwaga

Niektóre oprogramowanie sieci VPN lub serwera proxy może uniemożliwić przejście do witryny. Możesz tymczasowo wyłączyć go, aby upewnić się, że kontener działa.

Przykładowy katalog w usłudze GitHub zawiera skrypt programu PowerShell , który wykonuje te polecenia. Otwórz okno programu PowerShell, zmień katalog na katalog rozwiązania i wpisz:

./run.ps1

Powyższe polecenie kompiluje obraz, wyświetla listę obrazów na maszynie i uruchamia kontener.

Aby zatrzymać kontener, wydaj docker stop polecenie:

docker stop randomanswers

Aby usunąć kontener, wydaj docker rm polecenie:

docker rm randomanswers