Cvičení – přizpůsobení image Dockeru pro spuštění vlastní webové aplikace

Dokončeno

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

  1. Pokud ještě není spuštěný, spusťte Na počítači Docker.

  2. 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
    
  3. Zadáním následujícího příkazu otevřete src adresář.

    cd mslearn-hotel-reservation-system/src
    
  4. src V adresáři zadejte následující příkazy, které vytvoří nový soubor s názvem Dockerfile a otevře ho v Poznámkový blok:

    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.

  5. 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 této webové aplikace (HotelReservationSystem.csproj) a projekt knihovny (HotelReservationSystemTypes.csproj) jsou zkopírované do složky /src v kontejneru. Příkaz dotnet restore stáhne závislosti vyžadované těmito projekty z NuGetu.

  6. 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é soubory DLL se zapíšou do složky /app v kontejneru.

  7. 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.

  8. 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říkaz dotnet HotelReservationSystem.dll. Tato knihovna obsahuje zkompilovaný kód pro webovou aplikaci.

  9. 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

  1. 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ázev reservationsystem. Ověřte, že je image úspěšně sestavená. Po dokončení tohoto procesu se zobrazí upozornění na oprávnění souboru a adresáře. Pro účely tohoto cvičení můžete tato upozornění ignorovat. Sestavení image může chvíli trvat.

    docker build -t reservationsystem .
    
  2. 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

  1. 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ázev reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. 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:

    Screenshot of the hotel reservations system web app running in a browser.

    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.

  3. 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
    • PORTY
    • NÁZVY

    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
    
  4. Zadáním následujícího příkazu zastavte kontejner reservations :

    docker container stop reservations
    
  5. Odstraňte kontejner reservations z místního registru.

    docker rm reservations
    
  6. Ponechejte v místním registru reservationsystem. Tento obrázek použijete v dalším cvičení.

Blahopřejeme! Vytvořili jste image pro webovou aplikaci a spustili jste ji pomocí kontejneru Dockeru.