Cvičení – vytvoření image kontejneru pro mikroslužbu .NET
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:
- Nainstalujte všechny požadavky na systém pro spuštění vývojového kontejneru v editoru Visual Studio Code.
- Ujistěte se, že je Docker spuštěný.
- V novém okně editoru Visual Studio Code otevřete složku klonovaného úložiště.
- Stisknutím kombinace kláves Ctrl+Shift+P otevřete paletu příkazů.
- Hledání: Dev Containers: >Opětovné sestavení a opětovné otevření v kontejneru
- 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.
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.
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.
V podokně PRŮZKUMNÍK vytvořte soubor s názvem Dockerfile v souboru ./dotnet-docker/Products. Soubor je prázdný.
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 imagebuild
.- Nastavte pracovní adresář v obrázku na
/DataEntities
hodnotu . - 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.
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
/src
hodnotu . - 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.
- Nastavte pracovní adresář v obrázku na
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
/app
hodnotu . - 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ředejteProducts.dll
ho jako argument.
- Stáhněte obrázek
Vytvoření image Dockeru
Po dokončení souboru Dockerfile je dalším krokem jeho použití k vytvoření image Dockeru:
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.
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.
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
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.
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" }, ... ]