Baru-baru ini saya membuat blog tentang mengoptimalkan ukuran file .NET dan ASP.NET Docker. .NET Core 2.0 sebelumnya telah dibangun di atas gambar Debian tetapi hari ini ada gambar pratinjau dengan .NET Core 2.1 nightlies menggunakan Alpine. Anda dapat membaca tentang pengumuman di sini tentang gambar pratinjau Alpine baru ini. Ada juga postingan rollup yang bagus di .NET dan Docker.
Mereka telah menambahkan dua gambar baru:
2.1-runtime-alpine
2.1-runtime-deps-alpine
Dukungan Alpine adalah bagian dari rilis .NET Core 2.1. Gambar .NET Core 2.1 saat ini disediakan di microsoft/dotnet-nightly repo, termasuk gambar Alpine baru. Gambar .NET Core 2.1 akan dipromosikan ke repo microsoft/dotnet saat dirilis pada tahun 2018.
CATATAN:Gambar -runtime-deps- berisi ketergantungan yang diperlukan untuk aplikasi .NET Core, tetapi BUKAN runtime .NET Core itu sendiri. Ini adalah gambar yang akan Anda gunakan jika aplikasi Anda adalah aplikasi mandiri yang menyertakan salinan runtime .NET Core. Ini adalah aplikasi yang diterbitkan dengan -r [runtimeid]. Kebanyakan orang akan menggunakan gambar -runtime- yang menyertakan runtime .NET Core lengkap. Untuk lebih jelasnya:
-
runtime
image berisi runtime .NET Core dan dimaksudkan untuk menjalankan aplikasi yang Di-Deployed Framework-Dependent - lihat contoh-
runtime-deps
image hanya berisi dependensi asli yang dibutuhkan oleh .NET Core dan dimaksudkan untuk menjalankan aplikasi Self-Contained Deployed - lihat contoh
Lebih baik menggunakan .NET Core untuk menggunakan file pembangunan multi-tahap, jadi Anda memiliki satu wadah yang membangun aplikasi Anda dan wadah yang berisi hasil pembangunan itu. Dengan begitu, Anda tidak akan mengirimkan gambar dengan sekumpulan SDK dan kompiler yang tidak Anda perlukan.
CATATAN:Baca ini untuk mempelajari lebih lanjut tentang versi gambar di Dockerfiles sehingga Anda dapat memilih tag yang tepat dan intisari untuk kebutuhan Anda. Idealnya Anda akan memilih file buruh pelabuhan yang bergulir ke depan untuk menyertakan tambalan servis terbaru.
Dengan file buruh pelabuhan ini, kami membangun dengan gambar SDK, lalu mempublikasikannya, dan hasilnya sekitar 219 MB.
FROM microsoft/dotnet:2.0-sdk as builder
RUN mkdir -p /root/src/app/dockertest
WORKDIR /root/src/app/dockertest
COPY dockertest.csproj .
RUN dotnet restore ./dockertest.csproj
COPY . .
RUN dotnet publish -c release -o published
FROM microsoft/dotnet:2.0.0-runtime
WORKDIR /root/
COPY --from=builder /root/src/app/dockertest/published .
ENV ASPNETCORE_URLS=http://+:5000
EXPOSE 5000/tcp
CMD ["dotnet", "./dockertest.dll"]
Kemudian saya akan menyimpan ini sebagai Dockerfile.debian dan membangun seperti ini:
> docker build . -t shanselman/dockertestdeb:0.1 -f dockerfile.debian
Dengan aplikasi ASP.NET standar, gambar ini menjadi 219 MB.
Sekarang saya hanya akan mengubah satu baris, dan menggunakan runtime alpine 2.1
FROM microsoft/dotnet-nightly:2.1-runtime-alpine
Dan buat seperti ini:
> docker build . -t shanselman/dockertestalp:0.1 -f dockerfile.alpine
dan bandingkan keduanya:
> docker images | find /i "dockertest"
shanselman/dockertestalp 0.1 3f2595a6833d 16 minutes ago 82.8MB
shanselman/dockertestdeb 0.1 0d62455c4944 30 minutes ago 219MB
Bagus. Sekitar 83 MB sekarang, bukan 219 MB untuk aplikasi web Hello World. Sekarang gagasan tentang mikro layanan lebih layak!
Silakan buka masalah GitHub di sini https://github.com/dotnet/dotnet-docker-nightly/issues/500 dan tawarkan pemikiran dan hasil Anda saat Anda menguji gambar Alpine ini. Juga, apakah Anda tertarik dengan "-debian-slim?" Itu akan menjadi setengah jalan ke Alpine tetapi tidak seberat hanya -debian.
Banyak hal hebat terjadi di sekitar .NET dan Docker. Pastikan juga untuk melihat posting Jeff Fritz tentang membuat ASP.NET Core Windows Container minimal untuk melihat bagaimana Anda dapat menghancurkan aplikasi Framework .(full) yang berjalan pada wadah Windows juga. Misalnya, gambar Windows Nano Server hanya dikompresi 93 MB .
Sponsor: Dapatkan pratinjau JetBrains Rider terbaru untuk dukungan .NET Core 2.0, Pelacakan Nilai dan Pelacakan Panggilan, runner MSTest, inspeksi dan refactoring kode baru, dan tampilan Parallel Stacks di debugger.