Latihan - Membangun gambar kontainer untuk layanan mikro .NET Anda
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:
- Pasang persyaratan sistem apa pun untuk menjalankan Dev Container di Visual Studio Code.
- Pastikan Docker berjalan.
- Di jendela Visual Studio Code baru, buka folder repositori kloning
- Tekan Ctrl+Shift+P untuk membuka palet perintah.
- Pencarian: >Kontainer Dev: Membangun dan Membuka kembali kontainer
- 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.
Untuk membuat gambar untuk semua eShopLite layanan, buka tab TERMINAL dan jalankan perintah ini:
cd ./dotnet-docker dotnet publish /p:PublishProfile=DefaultContainerAnda 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.
Periksa gambar yang tersedia di docker:
docker imagesAnda 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.
Di panel EXPLORER , buat file bernama Dockerfile di ./dotnet-docker/Products. File kosong.
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 /appSetelah menyelesaikan langkah-langkah berikut, kode ini akan mengatur pustaka DataEntities di citra Docker Produk.
- Tarik gambar
mcr.microsoft.com/dotnet/sdk:8.0dan beri nama gambarbuild. - Atur direktori kerja dalam gambar ke
/DataEntities. - Salin file bernama DataEntities.csproj yang ditemukan secara lokal ke
/DataEntitiesdirektori yang Anda buat. - Hubungi
dotnet restoremengenai proyek. - Salin semua yang ada di direktori DataEntities lokal ke gambar.
- Hubungi
dotnet publishmengenai proyek.
- Tarik gambar
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 /appKode 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
/srcdirektori yang Anda buat. - Hubungi
dotnet restoremengenai proyek. - Salin semua yang ada di direktori Produk lokal ke gambar.
- Hubungi
dotnet publishmengenai proyek.
- Atur direktori kerja dalam gambar ke
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
dotnetdan sampaikanProducts.dllsebagai argumen.
- Tarik gambar
Membuat gambar Docker
Setelah menyelesaikan Dockerfile, langkah selanjutnya adalah menggunakannya untuk membuat gambar Docker:
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.
Setelah banyak hasil, gambar akan terbentuk. Memasukkan
docker imagesakan 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.
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 productsAtau jika Anda ingin menjalankan gambar yang Anda buat menggunakan Dockerfile, jalankan:
docker run -it --rm -p 32001:8080 productsbackendUntuk 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.
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" }, ... ]