Pengantar .NET dan Docker

Kontainer adalah salah satu cara paling populer untuk menyebarkan dan menghosting aplikasi cloud, dengan alat seperti Docker, Kubernetes, dan Podman. Banyak pengembang memilih kontainer karena mudah untuk mengemas aplikasi dengan dependensinya dan mendapatkan aplikasi tersebut untuk berjalan dengan andal pada host kontainer apa pun. Ada dukungan ekstensif untuk menggunakan .NET dengan kontainer.

Docker memberikan gambaran umum kontainer yang bagus. Docker Desktop: Community Edition adalah alat yang baik untuk digunakan untuk menggunakan kontainer pada komputer desktop pengembang.

Gambar .NET

Gambar kontainer .NET resmi diterbitkan ke Registri Artefak Microsoft dan dapat ditemukan di Docker Hub. Ada gambar runtime untuk produksi dan gambar SDK untuk membangun kode Anda, untuk Linux (Alpine, Debian, Ubuntu, Mariner) dan Windows. Untuk informasi selengkapnya, lihat Gambar kontainer .NET.

Gambar .NET diperbarui secara teratur setiap kali patch .NET baru diterbitkan atau ketika gambar dasar sistem operasi diperbarui.

Gambar kontainer pahat adalah gambar kontainer Ubuntu dengan sekumpulan komponen minimal yang diperlukan oleh runtime .NET. Gambar-gambar ini ~ 100 MB lebih kecil dari gambar Ubuntu biasa dan memiliki lebih sedikit CVE karena memiliki lebih sedikit komponen. Secara khusus, mereka tidak berisi shell atau manajer paket, yang secara signifikan meningkatkan profil keamanan mereka. Mereka juga menyertakan pengguna non-root dan dikonfigurasi dengan pengguna yang diaktifkan.

Membangun gambar kontainer

Anda dapat membuat gambar kontainer dengan Dockerfile atau mengandalkan .NET SDK untuk menghasilkan gambar. Untuk sampel tentang membuat gambar, lihat dotnet/dotnet-docker dan dotnet/sdk-container-builds.

Contoh berikut menunjukkan pembuatan dan menjalankan gambar kontainer dalam beberapa langkah cepat (didukung dengan .NET 8 dan .NET 7.0.300).

$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
  Determining projects to restore...
  All projects are up-to-date for restore.
  webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
  webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
  Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
  Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID   IMAGE     COMMAND               CREATED              STATUS              PORTS                                       NAMES
7c7ad33409e5   webapp    "dotnet webapp.dll"   About a minute ago   Up About a minute   0.0.0.0:8000->8080/tcp, :::8000->8080/tcp   jovial_shtern
$ docker kill 7c7ad33409e5

docker init adalah opsi baru bagi pengembang yang ingin menggunakan Dockerfiles.

Port

Pemetaan port adalah bagian kunci dari penggunaan kontainer. Port harus diterbitkan di luar kontainer untuk merespons permintaan web eksternal. ASP.NET Gambar kontainer Core diubah di .NET 8 untuk mendengarkan di port 8080, secara default. .NET 6 dan 7 dengarkan di port 80.

Dalam contoh sebelumnya dengan docker run, port 8000 host dipetakan ke port 8080kontainer . Kubernetes bekerja dengan cara yang sama.

Variabel ASPNETCORE_HTTP_PORTSlingkungan , ASPNETCORE_HTTPS_PORTS, dan ASPNETCORE_URLS dapat digunakan untuk mengonfigurasi perilaku ini.

Pengguna

Dimulai dengan .NET 8, semua gambar menyertakan pengguna non-root yang disebut app. Secara default, gambar pahat dikonfigurasi dengan pengguna ini diaktifkan. Aplikasi publikasi sebagai fitur kontainer .NET (ditunjukkan di bagian Membangun gambar kontainer) juga mengonfigurasi gambar dengan pengguna ini diaktifkan secara default. Dalam semua skenario lainnya, app pengguna dapat diatur secara manual, misalnya dengan USERinstruksi Dockerfile . Jika gambar telah dikonfigurasi dengan app dan perintah perlu dijalankan sebagai root, maka USER instruksi dapat digunakan untuk mengatur ke pengguna ke root.

Tetap mendapatkan informasi

Berita terkait kontainer diposting ke diskusi dotnet/dotnet-docker dan ke kategori "kontainer" Blog .NET.

Layanan Azure

Berbagai layanan Azure mendukung kontainer. Anda membuat gambar Docker untuk aplikasi Anda dan menyebarkannya ke salah satu layanan berikut:

  • Azure Kubernetes Service (AKS)
    Menskalakan dan mengatur kontainer Windows & Linux menggunakan Kubernetes.

  • Azure App Service
    Menyebarkan aplikasi web atau API menggunakan kontainer di lingkungan PaaS.

  • Azure Container Apps
    Jalankan beban kerja kontainer Anda tanpa mengelola server, orkestrasi, atau infrastruktur dan memanfaatkan dukungan asli untuk Dapr dan KEDA untuk pengamatan dan penskalaan ke nol.

  • Azure Container Instances
    Buat kontainer individual di cloud tanpa layanan manajemen tingkat yang lebih tinggi.

  • Azure Batch
    Jalankan pekerjaan komputasi berulang menggunakan kontainer.

  • Azure Service Fabric
    Angkat, geser, dan modernisasi aplikasi .NET ke layanan mikro menggunakan kontainer Windows & Linux.

  • Azure Container Registry
    Simpan dan kelola gambar kontainer di semua jenis penyebaran Azure.

Langkah berikutnya