Alıştırma - .NET mikro hizmetiniz için kapsayıcı görüntüsü oluşturma
Bu alıştırmada bir mikro hizmet uç noktası oluşturacak ve .NET SDK ve Docker kullanarak bunu kapsayıcılı hale getirmeniz gerekir.
Not
Bu alıştırmayı, Docker ve .NET SDK önceden yüklenmiş gitHub Codespaces örneğinde tamamlayabilirsiniz. Bu araçları ve teknikleri kendi geliştirme ortamınızda kullandığınızda, bu önkoşulların yüklü olduğundan emin olun.
Geliştirme ortamını açma
Alıştırmayı barındıran bir GitHub kod alanı kullanmayı seçebilir veya alıştırmayı Visual Studio Code'da yerel olarak tamamlayabilirsiniz.
Bir codespacekullanmak için, bu Codespace oluşturma bağlantısıile önceden yapılandırılmış bir GitHub Codespace oluşturun.
GitHub'ın kod alanının oluşturulması ve yapılandırılması birkaç dakika sürer. İşlem tamamlandığında alıştırmanın kod dosyalarını görürsünüz. Bu modülün geri kalanı için kullanılan kod /dotnet-docker dizinindedir.
Visual Studio Codekullanmak için https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative deposunu yerel makinenize kopyalayın. Sonra:
- Herhangi bir sistem gereksinimini yükleyin, böylece Visual Studio Code'da Dev Container çalıştırabilirsiniz.
- Docker'ın çalıştığından emin olun.
- Yeni bir Visual Studio Code penceresinde kopyalanan deponun klasörünü açın
- Komut paletini açmak için Ctrl+Shift+P tuşlarına basın.
- Arama: >Geliştirme Kapsayıcıları: Kapsayıcı'de Yeniden Oluştur ve Yeniden Aç
- Açılan listeden eShopLite - dotnet-docker seçin. Visual Studio Code, geliştirme kapsayıcınızı yerel olarak oluşturur.
.NET publish kullanarak Products back-end imajını oluşturun
En son .NET 8 sürümü kapsayıcıya alma desteğini geliştirir. mikro hizmetleriniz için bir Docker görüntüsü oluşturmak için dotnet publish komutunu kullanabilirsiniz. komutu, hizmetleri bir app hesabı altında çalıştıran köksüz bir kapsayıcı görüntüsü oluşturur. Kök erişimi gerektirmeyen kapsayıcılar çalıştırmak, güvenlik ve performans için mükemmeldir. Komut, proje dosyasındaki ayarları denetleyerek en iyi temel görüntüyü seçmeyi bilir.
Tüm eShopLite hizmetlerinin görüntülerini oluşturmak için TERMINAL sekmesine gidin ve şu komutu çalıştırın:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainerAşağıdaki iletiler gibi bir çıkış görürsünüz:
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'.komut çözüm dosyasını okur, üç proje içerdiğini belirler, bunları oluşturur ve mağaza ve ürün projeleri için görüntüler oluşturur. Görüntüler projelerin adını alır ve yerel docker kayıt defterinde yayımlanır.
Görüntülerin docker'da kullanılabilir olup olmadığını denetleyin:
docker imagesAşağıdaki iletiler gibi bir çıkış görürsünüz:
REPOSITORY TAG IMAGE ID CREATED SIZE products latest 63614e340088 About a minute ago 293MB store latest e9458c3abdb1 About a minute ago 218MB
Ürünler arka uç görüntüsünü oluşturmak için Dockerfile kullanma
Görüntülerin nasıl oluşturulduğu hakkında daha fazla denetime sahip olmak istiyorsanız, Ürünler web hizmeti için görüntü oluşturmak üzere Dockerfile kullanabilirsiniz.
EXPLORER bölmesinde, ./dotnet-docker/Productsiçinde Dockerfile adlı bir dosya oluşturun. Dosya boş.
Aşağıdaki kodu girin:
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 /appAşağıdaki adımları tamamladıktan sonra, bu kod Products docker görüntüsünde DataEntities kitaplığını ayarlar:
-
mcr.microsoft.com/dotnet/sdk:8.0görüntüsünü çekin ve görüntüyübuildolarak adlandırın. - Görüntüdeki çalışma dizinini
/DataEntitiesolarak ayarlayın. - Yerel olarak bulunan DataEntities.csproj adlı dosyayı oluşturduğunuz
/DataEntitiesdizinine kopyalayın. - Projede
dotnet restore'ı arayın. - Yerel DataEntities dizinindeki her şeyi görüntüye kopyalayın.
- Projede
dotnet publish'ı arayın.
-
Son satırın hemen altına şu kodu girin:
WORKDIR /src COPY Products/Products.csproj . RUN dotnet restore COPY Products . RUN dotnet publish -c release -o /appBu kod çağrıldığında sıralı olarak aşağıdaki adımları uygular:
- Görüntüdeki çalışma dizinini
/srcolarak ayarlayın. - Yerel olarak bulunan Products.csproj adlı dosyayı oluşturduğunuz
/srcdizinine kopyalayın. - Projede
dotnet restore'ı arayın. - Yerel Ürünler dizinindeki her şeyi görüntüye kopyalayın.
- Projede
dotnet publish'ı arayın.
- Görüntüdeki çalışma dizinini
Son satırın hemen altına şu kodu girin:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app . ENTRYPOINT ["dotnet", "Products.dll"]Bu kod çağrıldığında sıralı olarak aşağıdaki adımları uygular:
-
mcr.microsoft.com/dotnet/aspnet:8.0görüntüsünü çekin. - Görüntüdeki çalışma dizinini
/appolarak ayarlayın. - 80 ve 443 numaralı bağlantı noktalarını kullanıma sunma.
- Oluşturduğunuz derleme görüntüsünün uygulama dizinindeki her şeyi bu görüntünün uygulama dizinine kopyalayın.
- Bu görüntünün giriş noktasını
dotnetolarak ayarlayın veProducts.dll'i bir bağımsız değişken olarak geçirin.
-
Docker görüntüsünü oluşturma
Dockerfile dosyasını tamamladıktan sonra, sonraki adım docker görüntüsü oluşturmak için kullanmaktır:
Ürünler arka uç hizmeti için görüntü oluşturmak için TERMINAL sekmesine gidin ve şu komutu çalıştırın:
cd ./dotnet-docker docker build -t productsbackend:latest -f Products/Dockerfile .Bu, geçerli dizindeki Dockerfile komutlarını çalıştırır ve sonuçta elde edilen görüntüye productsbackend:latest etiketini uygular.
Çok fazla çıktıdan sonra görüntü oluşturulur.
docker imagesgirildiğinde, productsbackenddahil olmak üzere kod alanınızdaki tüm görüntülerin listesi gösterilir. Diğer görüntü, kod alanının kendisi için bir görüntüdür.Aşağıdaki iletiler gibi bir çıkış görürsünüz:
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
dotnet publish kullanmakla uygulamalarınızdaki her mikro hizmet için Dockerfiles el ile oluşturmak zorunda kalmak arasındaki farkı düşünün.
Kapsayıcıyı çalıştırın ve hizmeti test edin
Artık Products hizmetini çalıştırmak ve barındırmak için görüntüyü kullanabilirsiniz.
Yeni ürünleri görüntüsünden bir kapsayıcı oluşturup çalıştırmak ve hizmeti 32001 numaralı bağlantı noktasında kullanıma açmak için şu komutu çalıştırın:
docker run -it --rm -p 32001:8080 productsVeya Dockerfile kullanarak oluşturduğunuz görüntüyü çalıştırmak isterseniz şunu çalıştırın:
docker run -it --rm -p 32001:8080 productsbackendHizmeti test etmek için PORTS sekmesine geçin ve ardından Arka Uç bağlantı noktasının yerel adresinin sağındaki dünya simgesini seçin. Tarayıcı bu adreste yeni bir sekme açar.
Bazı ürünleri sorgulamak için adresi /api/product ekleyin ve Entertuşuna basın. Bazı ürün bilgilerinin JSON biçiminde listelendiğini görmeniz gerekir.
[ { "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" }, ... ]