Cvičení – přizpůsobení image Dockeru pro spuštění vlastní webové aplikace
Soubor Dockerfile obsahuje kroky pro sestavení vlastní image Dockeru.
Rozhodnete se nasadit některou z webových aplikací vaší organizace pomocí Dockeru. Vyberete jednoduchou webovou aplikaci, která implementuje webové rozhraní API pro web rezervací hotelů. Webové rozhraní API zveřejňuje operace HTTP POST a GET, které vytvářejí a načítají rezervace zákazníků.
Poznámka:
V této verzi webové aplikace se rezervace ve skutečnosti neuchovávají a dotazy vrací fiktivní data.
V tomto cvičení vytvoříte soubor Dockerfile pro aplikaci, která ho nemá. Pak sestavíte image a spustíte ji místně.
Vytvoření souboru Dockerfile pro webovou aplikaci
Pokud ještě není spuštěný, spusťte Na počítači Docker.
V okně příkazového řádku na místním počítači stáhněte spuštěním následujícího příkazu zdrojový kód webové aplikace.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.gitZadáním následujícího příkazu otevřete
srcadresář.cd mslearn-hotel-reservation-system/srcsrcV adresáři zadejte následující příkazy, které vytvoří nový soubor s názvemDockerfilea otevře ho v Poznámkovém bloku:copy NUL Dockerfile notepad DockerfilePoznámka:
Ve výchozím nastavení příkaz poznámkového bloku otevře textový soubor. Ujistěte se, že je uložíte jako typ souboru Všechny soubory bez přípony souboru. Ověřte to tak, že otevřete složku src v Průzkumník souborů a vyberete Zobrazit > příponu> názvu souboru. V případě potřeby soubor přejmenujte a odeberte
.txtz názvu souboru.Do souboru Dockerfile přidejte následující kód:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR /src COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"] COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"] RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"Tento kód obsahuje příkazy pro načtení image obsahující sadu .NET Core Framework SDK. Soubory projektu pro webovou aplikaci (
HotelReservationSystem.csproj) a projekt knihovny (HotelReservationSystemTypes.csproj) se zkopírují do/srcsložky v kontejneru. Příkazdotnet restorestáhne závislosti vyžadované těmito projekty z NuGetu.Do dolní části souboru Dockerfile připojte následující kód:
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /appTyto příkazy zkopírují zdrojový kód webové aplikace do kontejneru a pak spustí příkaz dotnet build, který aplikaci sestaví. Výsledné knihovny DLL se zapisují do
/appsložky v kontejneru.V dolní části souboru Dockerfile připojte následující příkaz.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /appPříkaz
dotnet publishzkopíruje spustitelné soubory webu do nové složky a odebere všechny dočasné soubory. Soubory v této složce je pak možné nasadit na web.Do dolní části souboru Dockerfile připojte následující příkazy.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]První příkaz otevře port 80 v kontejneru. Druhý příkaz přejde do složky
/app, která obsahuje publikovanou verzi webové aplikace. Poslední příkaz určuje, že při spuštění kontejneru by se měl spustit příkazdotnet HotelReservationSystem.dll. Tato knihovna obsahuje zkompilovaný kód pro webovou aplikaci.Uložte soubor a zavřete textový editor. Ujistěte se, že je uložíte jako typ souboru Všechny soubory bez přípony souboru.
Sestavení a nasazení image pomocí souboru Dockerfile
Na příkazovém řádku sestavte spuštěním následujícího příkazu image ukázkové aplikace pomocí souboru Dockerfile. Nezapomeňte na
.na konci příkazu. Tento příkaz sestaví image a místně ji uloží. Image dostane názevreservationsystem. Ověřte, že je image úspěšně sestavená. Po dokončení procesu se může zobrazit upozornění na oprávnění k souborům a adresářům. Toto upozornění můžete pro účely tohoto cvičení ignorovat. Sestavení image může chvíli trvat.docker build -t reservationsystem .Spuštěním následujícího příkazu ověřte, že image byla vytvořena a uložena v místním registru:
docker image listImage bude mít název
reservationsystem. Budete mít také obrázek s názvem microsoft/dotnet:REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
Test webové aplikace
Zadáním následujícího kódu spusťte kontejner pomocí
reservationsystemimage. Docker vrátí dlouhý řetězec šestnáctkových číslic. Kontejner běží na pozadí bez uživatelského rozhraní. Port 80 v kontejneru je namapovaný na port 8080 na hostitelském počítači. Kontejner má názevreservations.docker run -p 8080:80 -d --name reservations reservationsystemSpusťte webový prohlížeč a přejděte na adresu
http://localhost:8080/api/reservations/1. Měli byste získat objekt JSON obsahující data pro číslo rezervace 1 podobný následujícímu výstupu:
Nahraďte 1 na konci adresy URL místního hostitele jiným číslem rezervace, například 2 nebo 20, a zobrazte odpovídající podrobnosti o rezervaci.
Spuštěním následujícího příkazu zobrazte stav kontejneru:
docker ps -aVýstup obsahuje následující seznam pro všechny dostupné kontejnery:
- ID KONTEJNERU
- OBRAZ
- PŘÍKAZ
- ČAS VYTVOŘENÍ
- STAV
- PŘÍSTAVY
- JMÉNA
Ověřte, že je kontejner
STATUSvzhůru.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07b0d1de4db7 reservationsystem "dotnet HotelReserva…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp reservationsZadáním následujícího příkazu zastavte kontejner reservations :
docker container stop reservationsOdstraňte kontejner reservations z místního registru.
docker rm reservationsPonechejte v místním registru reservationsystem. Tento obrázek použijete v dalším cvičení.
Gratulujeme! Vytvořili jste image pro webovou aplikaci a spustili jste ji pomocí kontejneru Dockeru.