Cvičení – vytvoření image kontejneru pro mikroslužbu .NET

Dokončeno

V tomto cvičení vytvoříte koncový bod mikroslužby a kontejnerizujete ho pomocí sady .NET SDK a Dockeru.

Poznámka:

Toto cvičení můžete dokončit v instanci GitHub Codespaces s předinstalovanou sadou Docker a .NET SDK . Pokud tyto nástroje a techniky používáte ve vlastním vývojovém prostředí, ujistěte se, že máte nainstalované tyto požadavky.

Otevření vývojového prostředí

Můžete použít codespace GitHubu, který je hostitelem cvičení, nebo cvičení dokončit místně v editoru Visual Studio Code.

Pokud chcete použít codespace, vytvořte předem nakonfigurovaný kód GitHub Codespace pomocí tohoto odkazu pro vytvoření Codespace.

Vytvoření a konfigurace prostoru kódu na GitHubu trvá několik minut. Po dokončení procesu se zobrazí soubory kódu pro cvičení. Kód použitý pro zbytek tohoto modulu je v adresáři /dotnet-docker .

Pokud chcete použít Visual Studio Code, naklonujte https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative úložiště do místního počítače. Potom:

  1. Nainstalujte všechny požadavky na systém pro spuštění vývojového kontejneru v editoru Visual Studio Code.
  2. Ujistěte se, že je Docker spuštěný.
  3. V novém okně editoru Visual Studio Code otevřete složku klonovaného úložiště.
  4. Stisknutím kombinace kláves Ctrl+Shift+P otevřete paletu příkazů.
  5. Hledání: Dev Containers: >Opětovné sestavení a opětovné otevření v kontejneru
  6. V rozevíracím seznamu vyberte eShopLite – dotnet-docker . Visual Studio Code vytvoří vývojový kontejner místně.

Vytvoření back-endové image produktů pomocí publikování .NET

Nejnovější verze .NET 8 zlepšuje podporu kontejnerizace. Pomocí příkazu můžete dotnet publish vytvořit image Dockeru pro mikroslužby. Příkaz vytvoří image kontejneru bez kořenového adresáře, která spouští služby v app rámci účtu. Spouštění bez rootless kontejnerů je skvělé pro zabezpečení a výkon. Příkaz ví, jak vybrat nejlepší základní image tím, že zkontroluje nastavení v souboru projektu.

  1. Pokud chcete vytvořit image pro všechny eShopLite služby, přejděte na kartu TERMINÁL a spusťte tento příkaz:

    cd ./dotnet-docker 
     dotnet publish /p:PublishProfile=DefaultContainer
    

    Zobrazí se výstup podobný následujícím zprávům:

    DataEntities -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/DataEntities/bin/Release/net8.0/publish/
    Products -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Products/bin/Release/net8.0/Products.dll
    Products -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Products/bin/Release/net8.0/publish/
    Store -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Store/bin/Release/net8.0/Store.dll
    Store -> /workspaces/mslearn-dotnet-cloudnative/dotnet-docker/Store/bin/Release/net8.0/publish/
    Building image 'store' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
    Building image 'products' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
    Pushed image 'store:latest' to local registry via 'docker'.
    Pushed image 'products:latest' to local registry via 'docker'.
    

    Příkaz přečte soubor řešení, určil, že obsahuje tři projekty, vytvořil je a vytvořil obrázky pro projekty obchodu a produktů. Image jsou pojmenovány za projekty a publikovány v místním registru Dockeru.

  2. Zkontrolujte, jestli jsou image dostupné v Dockeru:

    docker images
    

    Zobrazí se výstup podobný následujícím zprávům:

    REPOSITORY                          TAG       IMAGE ID       CREATED              SIZE
    products                            latest    63614e340088   About a minute ago   293MB
    store                               latest    e9458c3abdb1   About a minute ago   218MB
    

Vytvoření back-endové image Products pomocí souboru Dockerfile

Pokud chcete mít větší kontrolu nad vytvářením imagí, můžete pomocí souboru Dockerfile vytvořit image pro webovou službu Products.

  1. V podokně PRŮZKUMNÍK vytvořte soubor s názvem Dockerfile v souboru ./dotnet-docker/Products. Soubor je prázdný.

  2. Zadejte následující kód:

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    
    WORKDIR /DataEntities
    COPY "DataEntities/DataEntities.csproj" .
    RUN dotnet restore
    COPY "DataEntities" .
    RUN dotnet publish -c release -o /app
    

    Po dokončení následujících kroků tento kód nastaví knihovnu DataEntities v imagi Dockeru Products:

    • mcr.microsoft.com/dotnet/sdk:8.0 Stáhněte image a pojmenujte image build.
    • Nastavte pracovní adresář v obrázku na /DataEntitieshodnotu .
    • Zkopírujte soubor s názvem DataEntities.csproj nalezen místně do /DataEntities adresáře, který jste vytvořili.
    • Zavolejte dotnet restore projekt.
    • Zkopírujte všechno v místním adresáři DataEntities do image.
    • Zavolejte dotnet publish projekt.
  3. Přímo pod posledním řádkem zadejte tento kód:

     WORKDIR /src
     COPY Products/Products.csproj .
     RUN dotnet restore
     COPY Products .
     RUN dotnet publish -c release -o /app
    

    Tento kód provede následující kroky postupně při vyvolání:

    • Nastavte pracovní adresář v obrázku na /srchodnotu .
    • Zkopírujte soubor s názvem Products.csproj nalezen místně do /src adresáře, který jste vytvořili.
    • Zavolejte dotnet restore projekt.
    • Zkopírujte všechno v místním adresáři Products do image.
    • Zavolejte dotnet publish projekt.
  4. Přímo pod posledním řádkem zadejte tento kód:

     FROM mcr.microsoft.com/dotnet/aspnet:8.0
     WORKDIR /app
     EXPOSE 80
     EXPOSE 443
     COPY --from=build /app .
     ENTRYPOINT ["dotnet", "Products.dll"]
    

    Tento kód provede následující kroky postupně při vyvolání:

    • Stáhněte obrázek mcr.microsoft.com/dotnet/aspnet:8.0 .
    • Nastavte pracovní adresář v obrázku na /apphodnotu .
    • Vystavení portu 80 a 443
    • Zkopírujte všechno z adresáře aplikace image sestavení, kterou jste vytvořili, do adresáře aplikace této image.
    • Nastavte vstupní bod tohoto obrázku dotnet a předejte Products.dll ho jako argument.

Vytvoření image Dockeru

Po dokončení souboru Dockerfile je dalším krokem jeho použití k vytvoření image Dockeru:

  1. Pokud chcete vytvořit image back-endové služby Products, přejděte na kartu TERMINÁL a spusťte tento příkaz:

    cd ./dotnet-docker 
     docker build -t productsbackend:latest -f Products/Dockerfile .
    

    Tím se spustí příkazy v souboru Dockerfile v aktuálním adresáři a použije značky productsbackend:latest na výslednou image.

  2. Po velké míře výstupu se image sestaví. Při zadávání docker images se zobrazí seznam všech obrázků ve vašem prostoru kódu včetně productsbackend. Druhý obrázek je ten, který je určený pro samotný codespace.

    Zobrazí se výstup podobný následujícím zprávům:

    REPOSITORY                          TAG       IMAGE ID       CREATED              SIZE
    products                            latest    63614e340088   10 minutes ago       293MB
    store                               latest    e9458c3abdb1   10 minutes ago       218MB
    productsbackend                     latest   190783f7e06f    About a minute ago   293MB
    

Zamyslete se nad rozdílem mezi používáním dotnet publish a ručním vytvořením souborů Dockerfile pro každou mikroslužbu v aplikacích.

Spuštění kontejneru a otestování služby

Teď můžete image použít ke spuštění a hostování služby Products.

  1. Pokud chcete vytvořit a spustit kontejner z nové image produktů a zveřejnit službu na portu 32001, spusťte tento příkaz:

    docker run -it --rm -p 32001:8080  products
    

    Nebo pokud chcete spustit image, kterou jste vytvořili pomocí souboru Dockerfile, spusťte:

    docker run -it --rm -p 32001:8080 productsbackend
    
  2. Pokud chcete službu otestovat, přepněte na kartu PORTY a napravo od místní adresy pro port Back End vyberte ikonu zeměkoule. V prohlížeči se na této adrese otevře nová karta.

    Snímek obrazovky znázorňující, jak se připojit ke službě back-end products

  3. Pokud chcete zadat dotaz na některé produkty, připojte adresu pomocí /api/product a stiskněte Enter. Měly by se zobrazit některé informace o produktu ve formátu JSON.

    [
        {
            "id": 1,
            "name": "Solar Powered Flashlight",
            "description": "A fantastic product for outdoor enthusiasts",
            "price": 19.99,
            "imageUrl": "product1.png"
        },
        {
            "id": 2,
            "name": "Hiking Poles",
            "description": "Ideal for camping and hiking trips",
            "price": 24.99,
            "imageUrl": "product2.png"
        },
        {
            "id": 3,
            "name": "Outdoor Rain Jacket",
            "description": "This product will keep you warm and dry in all weathers",
            "price": 49.99,
            "imageUrl": "product3.png"
        },
        ...
    ]