Latihan - Membangun gambar kontainer untuk layanan mikro .NET Anda

Selesai

Dalam latihan ini, Anda membuat titik akhir layanan mikro dan menampungnya dengan menggunakan .NET SDK dan Docker.

Nota

Anda dapat menyelesaikan latihan ini dalam instans GitHub Codespaces yang memiliki Docker dan .NET SDK yang telah diinstal sebelumnya. Saat Anda menggunakan alat dan teknik ini di lingkungan pengembangan Anda sendiri, pastikan Anda telah menginstal prasyarat ini.

Buka lingkungan pengembangan

Anda dapat memilih untuk menggunakan ruang kode GitHub yang menghosting latihan, atau menyelesaikan latihan secara lokal di Visual Studio Code.

Untuk menggunakan codespace, buat GitHub Codespace yang telah dikonfigurasi sebelumnya dengan tautan pembuatan Codespace ini.

GitHub membutuhkan waktu beberapa menit untuk membuat dan mengonfigurasi codespace. Setelah proses selesai, Anda akan melihat file kode untuk latihan. Kode yang digunakan untuk sisa modul ini ada di direktori /dotnet-docker.

Untuk menggunakan Visual Studio Code, kloning https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative repositori ke komputer lokal Anda. Kemudian:

  1. Pasang persyaratan sistem apa pun untuk menjalankan Dev Container di Visual Studio Code.
  2. Pastikan Docker berjalan.
  3. Di jendela Visual Studio Code baru, buka folder repositori kloning
  4. Tekan Ctrl+Shift+P untuk membuka palet perintah.
  5. Pencarian: >Kontainer Dev: Membangun dan Membuka kembali kontainer
  6. Pilih eShopLite - dotnet-docker dari menu drop-down. Visual Studio Code membuat kontainer pengembangan Anda secara lokal.

Gunakan .NET publish untuk membuat citra back-end untuk Produk

Rilis .NET 8 terbaru meningkatkan dukungan untuk kontainerisasi. Anda dapat menggunakan perintah dotnet publish untuk membuat gambar Docker untuk layanan mikro Anda. Perintah membuat image kontainer tanpa akses root yang menjalankan layanan di bawah akun app. Menjalankan kontainer tanpa hak akses root sangat bagus untuk keamanan dan performa. Perintah ini tahu cara memilih gambar dasar terbaik dengan memeriksa pengaturan dalam file proyek.

  1. Untuk membuat gambar untuk semua eShopLite layanan, buka tab TERMINAL dan jalankan perintah ini:

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

    Anda melihat output seperti pesan berikut:

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

    Perintah membaca file solusi, menentukan file tersebut berisi tiga proyek, membuatnya, dan membuat gambar untuk proyek toko dan produk. Gambar dinamai sesuai dengan proyek dan diterbitkan ke dalam registri docker lokal.

  2. Periksa gambar yang tersedia di docker:

    docker images
    

    Anda melihat output seperti pesan berikut:

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

Gunakan Dockerfile untuk membuat citra back-end Produk

Jika Anda ingin lebih mengontrol bagaimana gambar dibuat, Anda dapat menggunakan Dockerfile untuk membuat gambar untuk layanan web Products.

  1. Di panel EXPLORER , buat file bernama Dockerfile di ./dotnet-docker/Products. File kosong.

  2. Masukkan kode berikut:

    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
    

    Setelah menyelesaikan langkah-langkah berikut, kode ini akan mengatur pustaka DataEntities di citra Docker Produk.

    • Tarik gambar mcr.microsoft.com/dotnet/sdk:8.0 dan beri nama gambar build.
    • Atur direktori kerja dalam gambar ke /DataEntities.
    • Salin file bernama DataEntities.csproj yang ditemukan secara lokal ke /DataEntities direktori yang Anda buat.
    • Hubungi dotnet restore mengenai proyek.
    • Salin semua yang ada di direktori DataEntities lokal ke gambar.
    • Hubungi dotnet publish mengenai proyek.
  3. Tepat di bawah baris terakhir, masukkan kode ini:

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

    Kode ini melakukan langkah-langkah berikut secara berurutan saat dipanggil:

    • Atur direktori kerja dalam gambar ke /src.
    • Salin file bernama Products.csproj yang ditemukan secara lokal ke /src direktori yang Anda buat.
    • Hubungi dotnet restore mengenai proyek.
    • Salin semua yang ada di direktori Produk lokal ke gambar.
    • Hubungi dotnet publish mengenai proyek.
  4. Tepat di bawah baris terakhir, masukkan kode ini:

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

    Kode ini melakukan langkah-langkah berikut secara berurutan saat dipanggil:

    • Tarik gambar mcr.microsoft.com/dotnet/aspnet:8.0.
    • Atur direktori kerja dalam gambar ke /app.
    • Mengekspos port 80 dan 443.
    • Salin semuanya dari direktori aplikasi dari build image yang Anda buat ke direktori aplikasi image ini.
    • Atur titik masuk gambar ini ke dotnet dan sampaikan Products.dll sebagai argumen.

Membuat gambar Docker

Setelah menyelesaikan Dockerfile, langkah selanjutnya adalah menggunakannya untuk membuat gambar Docker:

  1. Untuk membuat gambar untuk layanan back-end Produk, buka tab TERMINAL dan jalankan perintah ini:

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

    Ini menjalankan perintah di Dockerfile di direktori saat ini dan menerapkan tag productsbackend:latest ke gambar yang dihasilkan.

  2. Setelah banyak hasil, gambar akan terbentuk. Memasukkan docker images akan menunjukkan kepada Anda daftar semua gambar di ruang kode Anda termasuk produk backend. Gambar lainnya adalah gambar untuk codespace itu sendiri.

    Anda melihat output seperti pesan berikut:

    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
    

Pikirkan tentang perbedaan antara menggunakan dotnet publish dan harus membuat Dockerfiles secara manual untuk setiap layanan mikro di aplikasi Anda.

Jalankan kontainer dan uji layanan

Sekarang Anda dapat menggunakan gambar untuk menjalankan dan menghosting layanan Produk.

  1. Untuk membuat dan menjalankan container dari gambar produk baru dan mengekspos layanan pada port 32001, jalankan perintah ini:

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

    Atau jika Anda ingin menjalankan gambar yang Anda buat menggunakan Dockerfile, jalankan:

    docker run -it --rm -p 32001:8080 productsbackend
    
  2. Untuk menguji layanan, beralihlah ke tab PORTS lalu, di sebelah kanan alamat lokal untuk port Back End , pilih ikon bola dunia. Browser membuka tab baru di alamat tersebut.

    Cuplikan layar memperlihatkan cara menyambungkan ke layanan produk backend.

  3. Untuk mengkueri beberapa produk, tambahkan alamat dengan /api/product lalu tekan Enter. Anda akan melihat beberapa informasi produk yang tercantum dalam format 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"
        },
        ...
    ]