Migrowanie aplikacji ASP.NET MVC do kontenerów systemu Windows
Uruchamianie istniejącej aplikacji opartej na programie .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.
Zacznij od istniejącej aplikacji MVC ASP.NET, a następnie skompilujesz 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 jest prostą witryną internetową, która losowo odpowiada na pytania. Ta aplikacja jest podstawową aplikacją MVC bez uwierzytelniania ani magazynu bazy danych; Umożliwia skoncentrowanie się na przeniesieniu warstwy internetowej do kontenera. W przyszłych tematach pokazano, jak przenosić magazyn trwały i zarządzać nim w konteneryzowanych aplikacjach.
Przeniesienie aplikacji obejmuje następujące kroki:
- Tworzenie zadania publikowania w celu skompilowania zasobów dla obrazu.
- Kompilowanie obrazu platformy Docker, który będzie uruchamiał aplikację.
- Uruchamianie kontenera platformy Docker, który uruchamia obraz.
- Weryfikowanie aplikacji przy użyciu przeglądarki.
Zakończona aplikacja znajduje się w witrynie GitHub.
Wymagania wstępne
Maszyna deweloperza musi mieć następujące oprogramowanie:
- Rocznicowa aktualizacja systemu Windows 10 (lub nowsza) lub Windows Server 2016 (lub nowsza)
- Docker for Windows — wersja Stable 1.13.0 lub 1.12 Beta 26 (lub nowsze wersje)
- Visual Studio 2017
Ważne
Jeśli używasz systemu 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 zajmuje kilka sekund:
Skrypt publikowania
Zbierz w jednym miejscu wszystkie elementy zawartości konieczne do załadowania do obrazu Docker. Aby utworzyć profil publikowania dla aplikacji, możesz użyć polecenia Publikuj w programie 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
- Kliknij prawym przyciskiem myszy projekt internetowy w programie Visual Studio, a następnie wybierz pozycję Publikuj.
- Kliknij przycisk Profil niestandardowy, a następnie wybierz pozycję System plików jako metodę.
- Wybierz katalog. Zgodnie z konwencją pobrany przykład używa metody
bin\Release\PublishOutput
.
Otwórz sekcję Opcje publikowania pliku 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.
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 dotyczące kompilowania 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ę w usłudze Docker Hub.
Obraz podstawowy, mcr.microsoft.com/dotnet/framework/aspnet:4.8
, jest obrazem systemu Windows Server. Zawiera system Windows Server Core, IIS i ASP.NET 4.8. Po uruchomieniu tego obrazu w kontenerze program automatycznie uruchomi usługi IIS i zainstalowane witryny internetowe.
Plik Dockerfile tworzący obraz wygląda następująco:
# The `FROM` instruction specifies the base image. You are
# extending the `mcr.microsoft.com/dotnet/framework/aspnet:4.8` image.
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8
# 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 uruchamiania 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 usługi 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 twojej 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 mapować kontener i porty hosta. Domyślny obraz aspnet skonfigurował już kontener do nasłuchiwania na porcie 80 i uwidacznia go.
Element --name randomanswers
nadaje 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 nawiąż połączenie z uruchomionym kontenerem przy użyciu http://localhost
pokazanego przykładu. 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 go wyłączyć, 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