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 spusťte kontejner. Toto téma vysvětluje, jak vzít existující ASP.NET aplikaci MVC a nasadit ji do 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 spouští 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řesun aplikace zahrnuje tyto kroky:

  1. Vytvoření úlohy publikování pro sestavení prostředků pro image
  2. Sestavení image Dockeru, která spustí vaši aplikaci.
  3. Spuštění kontejneru Dockeru, který spouští vaši image
  4. 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:

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:

kontejneru WindowsPřepnutí

Publikovat skript

Shromážděte na jednom místě všechny prostředky, které potřebujete nahrát do image Dockeru. K vytvoření profilu publikování pro vaši aplikaci můžete použít příkaz Publikovat v sadě Visual Studio. Tento profil umístí všechny prostředky do jednoho adresářového stromu, který zkopírujete do cílové image později v tomto kurzu.

Kroky publikování

  1. Klikněte pravým tlačítkem na webový projekt v sadě Visual Studio a vyberte Publikovat.
  2. Klikněte na tlačítko Vlastní profil a jako metodu vyberte Systém souborů .
  3. Zvolte adresář. Podle konvence stažené ukázky používá bin\Release\PublishOutput.

Publikování připojení

Otevřete oddíl Možnosti publikování souboru na kartě Nastavení . Během publikování vyberte Předkompilovat. Tato optimalizace znamená, že budete kompilovat zobrazení v kontejneru Dockeru a kopírujete předkompilovaná zobrazení.

Nastavení publikování Nastavení

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 image Dockeru. Dockerfile obsahuje pokyny k sestavení konečné image a obsahuje všechny základní názvy imagí, požadované komponenty, aplikaci, kterou chcete spustit, a další konfigurační image. Dockerfile je vstup do docker build příkazu, který image vytvoří.

V tomto cvičení vytvoříte image založenou na imagi microsoft/aspnet umístěné na Docker Hub. Základní image microsoft/aspnetje image Windows Serveru. Obsahuje Windows Server Core, IIS a ASP.NET 4.7.2. Když tuto image spustíte v kontejneru, automaticky se spustí služba IIS a nainstalované weby.

Soubor Dockerfile, který vytváří vaši image, vypadá takto:

# 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

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 nakonfigurován 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 aplikace ASP.NET. 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 mvcrandomanswers. To může zahrnovat stažení základní image z Docker Hub a následné přidání aplikace do této image.

Po dokončení příkazu můžete spuštěním docker images příkazu zobrazit informace o nové imagi:

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

ID IMAGE se na vašem počítači bude lišit. Teď spustíme aplikaci.

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 režimu odpojení. To znamená, že image Dockeru běží odpojená od aktuálního prostředí.

V mnoha příkladech dockeru se může zobrazit hodnota -p pro mapování portů kontejneru a hostitele. Výchozí image aspnet už nakonfigurovala kontejner tak, aby naslouchal na portu 80 a zpřístupnil ho.

The --name randomanswers dává název spuštěného kontejneru. Tento název můžete použít místo ID kontejneru ve většině příkazů.

Je mvcrandomanswers název obrázku, který se má spustit.

Ověření v prohlížeči

Jakmile se kontejner spustí, připojte se ke spuštěnému kontejneru pomocí http://localhost uvedeného příkladu. Zadejte tuto adresu URL do prohlížeče a měl by se zobrazit spuštěný web.

Poznámka

V přechodu na web vám může bránit některý vpn nebo proxy software. Můžete ho dočasně zakázat, abyste měli jistotu, že váš kontejner funguje.

Ukázkový adresář na GitHubu obsahuje powershellový skript , který tyto příkazy spustí 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 příkaz docker stop :

docker stop randomanswers

Pokud chcete kontejner odebrat, spusťte příkaz docker rm :

docker rm randomanswers