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.git
Zadáním následujícího příkazu otevřete
src
adresář.cd mslearn-hotel-reservation-system/src
src
V adresáři zadejte následující příkazy, které vytvoří nový soubor s názvemDockerfile
a otevře ho v Poznámkovém bloku:copy NUL Dockerfile notepad Dockerfile
Pozná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
.txt
z 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/src
složky v kontejneru. Příkazdotnet restore
stá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 /app
Tyto 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
/app
složky v kontejneru.V dolní části souboru Dockerfile připojte následující příkaz.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
Příkaz
dotnet publish
zkopí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 list
Image 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í
reservationsystem
image. 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 reservationsystem
Spusťte webový prohlížeč a přejděte na adresu
http://localhost:8080/api/reservations/1
. Měl by se zobrazit 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 -a
Výstup obsahuje následující seznam pro všechny dostupné kontejnery:
- ID KONTEJNERU
- IMAGE
- PŘÍKAZ
- ČAS VYTVOŘENÍ
- STAV
- PŘÍSTAVY
- JMÉNA
Ověřte, že je kontejner
STATUS
vzhů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 reservations
Zadáním následujícího příkazu zastavte kontejner reservations :
docker container stop reservations
Odstraňte kontejner reservations z místního registru.
docker rm reservations
Ponechejte 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.