Alıştırma - .NET mikro hizmetiniz için kapsayıcı görüntüsü oluşturma

Tamamlandı

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:

  1. Herhangi bir sistem gereksinimini yükleyin, böylece Visual Studio Code'da Dev Container çalıştırabilirsiniz.
  2. Docker'ın çalıştığından emin olun.
  3. Yeni bir Visual Studio Code penceresinde kopyalanan deponun klasörünü açın
  4. Komut paletini açmak için Ctrl+Shift+P tuşlarına basın.
  5. Arama: >Geliştirme Kapsayıcıları: Kapsayıcı'de Yeniden Oluştur ve Yeniden Aç
  6. 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.

  1. 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=DefaultContainer
    

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

  2. Görüntülerin docker'da kullanılabilir olup olmadığını denetleyin:

    docker images
    

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

  1. EXPLORER bölmesinde, ./dotnet-docker/Productsiçinde Dockerfile adlı bir dosya oluşturun. Dosya boş.

  2. 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 /app
    

    Aş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.0 gö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 /DataEntities dizinine kopyalayın.
    • Projede dotnet restore'ı arayın.
    • Yerel DataEntities dizinindeki her şeyi görüntüye kopyalayın.
    • Projede dotnet publish'ı arayın.
  3. 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 /app
    

    Bu 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 /src dizinine kopyalayın.
    • Projede dotnet restore'ı arayın.
    • Yerel Ürünler dizinindeki her şeyi görüntüye kopyalayın.
    • Projede dotnet publish'ı arayın.
  4. 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.0 gö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ı dotnet olarak ayarlayın ve Products.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:

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

  2. Çok fazla çıktıdan sonra görüntü oluşturulur. docker images girildiğ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.

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

    Veya 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 productsbackend
    
  2. Hizmeti 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.

    Arka uç ürünleri hizmetine bağlanmayı gösteren ekran görüntüsü.

  3. 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"
        },
        ...
    ]