Migrace aplikací ASP.NET MVC do kontejnerů s Windows
Spuštění existující aplikace založené na rozhraní .NET Framework v kontejneru Windows nevyžaduje žádné změny vaší aplikace. Pokud chcete aplikaci spustit v kontejneru Windows, vytvoříte image Dockeru obsahující vaši aplikaci a spustíte kontejner. Toto téma vysvětluje, jak použít existující aplikaci ASP.NET MVC a nasadit ji v kontejneru Windows.
Začnete s existující aplikací ASP.NET MVC a pak sestavíte publikované prostředky pomocí sady Visual Studio. Pomocí Dockeru vytvoříte image, která obsahuje a spustí vaši aplikaci. Přejdete na web spuštěný v kontejneru Windows a ověříte, že aplikace funguje.
Tento článek předpokládá základní znalost Dockeru. Informace o Dockeru najdete v článku Docker Overview (Přehled Dockeru).
Aplikace, kterou spustíte v kontejneru, je jednoduchý web, který náhodně odpovídá na otázky. Tato aplikace je základní aplikace MVC bez ověřování nebo úložiště databáze; umožňuje zaměřit se na přesun webové vrstvy do kontejneru. V budoucích tématech se dozvíte, jak přesunout a spravovat trvalé úložiště v kontejnerizovaných aplikacích.
Přesunutí aplikace zahrnuje tyto kroky:
- Vytvoření úlohy publikování pro sestavení prostředků pro image
- Vytvoření image Dockeru, která spustí vaši aplikaci.
- Spuštění kontejneru Dockeru, který spouští vaši image.
- Ověření aplikace pomocí prohlížeče
Hotová aplikace je na GitHubu.
Požadavky
Vývojový počítač musí mít následující software:
- Windows 10 Anniversary Update (nebo novější) nebo Windows Server 2016 (nebo novější)
- Docker pro Windows – verze Stable 1.13.0 nebo 1.12 Beta 26 (nebo novější verze)
- Visual Studio 2017
Důležité
Pokud používáte Windows Server 2016, postupujte podle pokynů pro nasazení hostitele kontejneru – Windows Server.
Po nainstalování a spuštění Dockeru klikněte pravým tlačítkem myši na ikonu na hlavním panelu a vyberte Switch to Windows containers (Přepnout na kontejnery Windows). To se vyžaduje pro spuštění imagí Dockeru založených na Windows. Provedení tohoto příkazu trvá několik sekund:
Publikování skriptu
Shromážděte na jednom místě všechny prostředky, které potřebujete nahrát do image Dockeru. Pomocí příkazu Publikovat v sadě Visual Studio můžete vytvořit profil publikování pro vaši aplikaci. Tento profil vloží všechny prostředky do jednoho stromu adresáře, který zkopírujete do cílové image později v tomto kurzu.
Kroky publikování
- Klikněte pravým tlačítkem myši na webový projekt v sadě Visual Studio a vyberte Publikovat.
- Klikněte na tlačítko Vlastní profil a jako metodu vyberte Systém souborů.
- Zvolte adresář. Podle konvence se stažená ukázka používá
bin\Release\PublishOutput
.
Otevřete oddíl Možnosti publikování souboru na kartě Nastavení. Během publikování vyberte Předkompil. Tato optimalizace znamená, že budete kompilovat zobrazení v kontejneru Dockeru a kopírujete předkompilovaná zobrazení.
Klikněte na Publikovat a Visual Studio zkopíruje všechny potřebné prostředky do cílové složky.
Sestavení image
Vytvořte nový soubor s názvem Dockerfile , který definuje vaši image Dockeru. Soubor Dockerfile obsahuje pokyny k sestavení konečné image a obsahuje všechny názvy základních imagí, požadované komponenty, aplikaci, kterou chcete spustit, a další konfigurační image. Dockerfile je vstup příkazu docker build
, který vytvoří image.
V tomto cvičení vytvoříte image založenou na imagi umístěné v microsoft/aspnet
Docker Hubu.
Základní image mcr.microsoft.com/dotnet/framework/aspnet:4.8
je image Windows Serveru. Obsahuje Windows Server Core, IIS a ASP.NET 4.8. Když tuto image spustíte ve svém kontejneru, automaticky se spustí služba IIS a nainstalované weby.
Soubor Dockerfile, který vytvoří vaši image, vypadá takto:
# 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
V tomto souboru Dockerfile není žádný příkaz ENTRYPOINT
. Žádný nepotřebujete. Při spuštění Windows Serveru se službou IIS je proces služby IIS vstupním bodem, který je nakonfigurovaný tak, aby se spustil v základní imagi aspnet.
Spuštěním příkazu Docker build vytvořte image, na které běží vaše ASP.NET aplikace. Uděláte to tak, že otevřete okno PowerShellu v adresáři projektu a do adresáře řešení zadáte následující příkaz:
docker build -t mvcrandomanswers .
Tento příkaz sestaví novou image podle pokynů v souboru Dockerfile a pojme image jako mvcrandomanswerswers (-t tagging). To může zahrnovat načtení základní image z Docker Hubu a následné přidání aplikace do této image.
Po dokončení příkazu můžete příkaz spustit docker images
a zobrazit informace o nové imagi:
REPOSITORY TAG IMAGE ID CREATED SIZE
mvcrandomanswers latest 86838648aab6 2 minutes ago 10.1 GB
ID IMAGE se bude na vašem počítači lišit. Teď aplikaci spustíme.
Spuštění kontejneru
Spuštěním následujícího docker run
příkazu spusťte kontejner:
docker run -d --name randomanswers mvcrandomanswers
Argument -d
říká Dockeru, aby spustil image v odpojeném režimu. To znamená, že image Dockeru běží odpojená od aktuálního prostředí.
V mnoha příkladech Dockeru se může zobrazit -p pro mapování kontejnerů a hostitelských portů. Výchozí image aspnet už nakonfigurovala kontejner tak, aby naslouchal na portu 80 a zpřístupnil ho.
Získáte --name randomanswers
název spuštěného kontejneru. Tento název můžete použít místo ID kontejneru ve většině příkazů.
Jedná se mvcrandomanswers
o název image, která se má spustit.
Ověření v prohlížeči
Jakmile se kontejner spustí, připojte se ke spuštěném kontejneru pomocí http://localhost
uvedeného příkladu. Zadejte tuto adresu URL do prohlížeče a měli byste vidět spuštěný web.
Poznámka:
Některé servery VPN nebo proxy software vám můžou bránit v navigaci na vaši lokalitu. Můžete ho dočasně zakázat, abyste měli jistotu, že kontejner funguje.
Ukázkový adresář na GitHubu obsahuje skript PowerShellu, který spouští tyto příkazy za vás. Otevřete okno PowerShellu, změňte adresář na adresář řešení a zadejte:
./run.ps1
Výše uvedený příkaz sestaví image, zobrazí seznam imagí na vašem počítači a spustí kontejner.
Pokud chcete kontejner zastavit, zadejte docker stop
příkaz:
docker stop randomanswers
Pokud chcete kontejner odebrat, zadejte docker rm
příkaz:
docker rm randomanswers