GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Menjelajahi ASP.NET Core dengan Docker di Linux dan Windows Containers

Pada bulan Mei tahun lalu melakukan sesuatu dengan ASP.NET dan Docker masih dalam masa pertumbuhan. Tapi hal-hal keren sedang terjadi. Saya menulis posting blog yang menunjukkan cara menerbitkan aplikasi ASP.NET 5 (5 pada saat itu, sekarang Core 1.0) ke Docker. Kemudian pada bulan Desember 2015 alat baru seperti Docker Toolbox dan Kitematic membuat segalanya lebih mudah. Pada bulan Mei 2016, Docker untuk Windows Beta terus bergerak maju dengan baik.

Saya ingin melihat bagaimana keadaan dengan ASP.NET Core, Docker, dan Windows di sini pada bulan Oktober 2016.

Saya menginstal hal-hal ini:

  • Komunitas Visual Studio 2015
    • Pembaruan Visual Studio 2015 3
  • ASP.NET Core dengan .NET Core
    • .NET Core 1.0.1 - Pratinjau Alat VS 2015 2
  • Docker untuk Windows (Saya menggunakan Saluran Beta)
  • Alat Studio Visual untuk Docker

Docker untuk Windows sangat bagus karena mengotomatiskan pengaturan Hyper-V untuk Anda dan membuat OS host Docker dan menjalankan semuanya. Ini sangat menghemat waktu.

Ada host Linux saya yang sebenarnya tidak perlu saya pikirkan. Saya akan melakukan semuanya dari baris perintah atau dari Visual Studio.

Saya akan mengatakan File | Proyek Baru dan buat aplikasi ASP.NET Core baru yang berjalan di .NET Core.

Lalu saya klik kanan dan Tambahkan | Dukungan Docker . Menu ini berasal dari Visual Studio Tools untuk ekstensi Docker. Ini menambahkan file Docker dasar dan beberapa file komposisi buruh pelabuhan. Di luar kotak, saya siap untuk menyebarkan aplikasi ASP.NET Core saya ke wadah Docker Linux.

ASP.NET Core dalam Wadah Docker Linux

Mulai dari aplikasi ASP.NET Core saya, saya akan memastikan gambar dasar saya (itu FROM di Dockerfile) adalah gambar dasar ASP.NET Core untuk Linux.

FROM microsoft/aspnetcore:1.0.1
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
ARG source=.
WORKDIR /app
EXPOSE 80
COPY $source .

Selanjutnya, karena saya belum ingin Docker membuat aplikasi saya, saya akan mempublikasikannya secara lokal. Pastikan untuk membaca posting blog Steve Lasker "Membangun Gambar Docker yang Dioptimalkan dengan ASP.NET Core" untuk mempelajari cara membuat satu wadah buruh pelabuhan membangun aplikasi Anda dan yang lainnya menjalankannya. Ini mengoptimalkan kepadatan dan sumber daya server.

Saya akan memublikasikan, lalu membuat gambar, dan menjalankannya.

>dotnet publish

>docker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonlinux

>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetcoreonlinux latest dab2bff7e4a6 28 seconds ago 276.2 MB
microsoft/aspnetcore 1.0.1 2e781d03cb22 44 hours ago 266.7 MB

>docker run -it -d -p 85:80 aspnetcoreonlinux
1cfcc8e8e7d4e6257995f8b64505ce25ae80e05fe1962d4312b2e2fe33420413

>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1cfcc8e8e7d4 aspnetcoreonlinux "dotnet WebApplicatio" 2 seconds ago Up 1 seconds 0.0.0.0:85->80/tcp clever_archimedes

Dan ada aplikasi ASP.NET Core saya yang berjalan di Docker. Jadi saya menjalankan Windows, menjalankan Hyper-V, menjalankan host Linux yang menghosting container Docker.

Apa lagi yang bisa saya lakukan?

ASP.NET Core di Docker Windows Container yang menjalankan Windows Nano Server

Ada Windows Server , ada Windows Server Core yang menghapus UI antara lain dan ada Windows Nano Server yang membuat Windows menyukai ratusan MB, bukan banyak pertunjukan. Ini berarti ada banyak pilihan bagus tergantung pada apa yang Anda butuhkan untuk fungsionalitas dan kepadatan server. Kirim sesedikit mungkin.

Biarkan saya melihat apakah saya bisa menjalankan ASP.NET Core di Kestrel di bawah Windows Nano Server. Tentu saja, karena Nano sangat mampu, saya dapat menjalankan IIS di dalam wadah dan ada dokumen tentang itu.

Michael Friis dari Docker memiliki posting blog yang bagus tentang membangun dan menjalankan Docker Windows Server Container pertama Anda. Dengan Docker baru untuk Windows, Anda cukup mengeklik kanannya dan beralih antara Linux dan Windows Containers.

Jadi sekarang saya menggunakan Docker dengan Windows Containers. Anda mungkin tidak tahu bahwa Anda mungkin sudah memiliki Windows Containers! Itu dikirim di dalam Windows 10 Anniversary Edition. Anda dapat memeriksa Wadah di Fitur:

Saya akan mengubah Dockerfile saya untuk menggunakan gambar Windows Nano Server. Saya juga dapat mengontrol port yang dibicarakan ASP.NET jika saya suka dengan Variabel Lingkungan dan Ekspos di dalam Docker.

FROM microsoft/dotnet:nanoserver
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
ARG source=.
WORKDIR /app
ENV ASPNETCORE_URLS http://+:82
EXPOSE 82
COPY $source .

Kemudian saya akan menerbitkan dan membangun...

>dotnet publish
>docker build bin\Debug\netcoreapp1.0\publish -t aspnetcoreonnano

Kemudian saya akan menjalankannya, memetakan port dari Windows di luar ke wadah Windows di dalam!

CATATAN: Ada bug pada tulisan ini yang memengaruhi cara Windows 10 berbicara dengan Wadah melalui "NAT" (Terjemahan Alamat Jaringan) sehingga Anda tidak dapat dengan mudah membuka http://localhost:82 seperti yang Anda (dan saya) inginkan. Hari ini Anda harus menekan IP wadah secara langsung. Saya akan melaporkan kembali setelah saya mendengar lebih banyak tentang bug ini dan bagaimana cara memperbaikinya. Ini akan muncul di Pembaruan Windows suatu hari nanti. Solusinya adalah mendapatkan alamat IP container dari docker seperti ini:docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" HASH

UPDATE :
Bug ini telah diperbaiki di Windows 10 April Update. Detailnya di sini Akses Localhost ke Windows Container Ports

Jadi saya akan menjalankan aplikasi ASP.NET Core saya di Windows Nano Server (sekali lagi, untuk lebih jelasnya, ini berjalan di Windows 10 dan Nano Server ada di dalam Container!)

>docker run -it -d -p 88:82 aspnetcoreonnano
afafdbead8b04205841a81d974545f033dcc9ba7f761ff7e6cc0ec8f3ecce215

>docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" afa
172.16.240.197

Sekarang saya dapat mencapai situs itu dengan 172.16.240.197:82. Setelah bug di atas diperbaiki, bug tersebut akan terkena dan dialihkan seperti wadah apa pun.

Bagian terbaik tentang Windows Containers adalah mereka cepat dan ringan. Setelah gambar diunduh dan dibuat di mesin Anda, Anda memulai dan menghentikannya dalam hitungan detik dengan Docker.

TETAPI, Anda juga dapat mengisolasi Wadah Windows menggunakan Docker seperti ini:

docker run --isolation=hyperv -it -d -p 86:82 aspnetcoreonnano

Jadi sekarang instance ini berjalan sepenuhnya terisolasi di dalam Hyper-V itu sendiri. Anda mendapatkan yang terbaik dari semua dunia. Penyebaran yang cepat dan nyaman ditambah isolasi opsional dan mudah.

ASP.NET Core di Docker Windows Container yang menjalankan Windows Server Core 2016

Saya kemudian dapat mengubah Dockerfile untuk menggunakan gambar Windows Server Core lengkap. Ini adalah 8 pertunjukan jadi bersiaplah karena akan membutuhkan sedikit waktu untuk mengunduh dan mengekstrak tetapi ini benar-benar Windows. Anda juga dapat memilih untuk menjalankan ini sebagai wadah atau sebagai wadah Hyper-V yang terisolasi.

Di sini saya hanya mengubah FROM untuk mendapatkan Windows Sever Core dengan .NET Core disertakan.

FROM microsoft/dotnet:1.0.0-preview2-windowsservercore-sdk
ENTRYPOINT ["dotnet", "WebApplication4.dll"]
ARG source=.
WORKDIR /app
ENV ASPNETCORE_URLS http://+:82
EXPOSE 82
COPY $source .

CATATAN: Saya mendengar kemungkinan bahwa gambar .NET Core pada Windows Server Core kemungkinan akan hilang. Lebih masuk akal jika .NET Core berjalan di Windows Nano Server atau gambar ringan lainnya. Anda akan menggunakan Server Core untuk hal-hal yang lebih berat, dan Server bagus karena itu berarti Anda dapat menjalankan aplikasi .NET Framework "penuh" dalam wadah! Jika Anda BENAR-BENAR ingin memiliki .NET Core di Server Core, Anda dapat membuat Dockerfile Anda sendiri dan dengan mudah membangun dan membuat gambar yang memiliki hal-hal yang Anda inginkan.

Kemudian saya akan memublikasikan, membangun, dan menjalankan lagi.

>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetcoreonnano latest 7e02d6800acf 24 minutes ago 1.113 GB
aspnetcoreonservercore latest a11d9a9ba0c2 28 minutes ago 7.751 GB

Karena wadah sangat cepat untuk memulai dan berhenti, saya dapat menjalankan pertanian web lengkap dengan Redis di Wadah, SQL di wadah lain, dan tumpukan web saya di wadah ketiga. Atau padu-padankan.

>docker ps
CONTAINER ID IMAGE COMMAND PORTS NAMES
d32a981ceabb aspnetcoreonwindows "dotnet WebApplicatio" 0.0.0.0:87->82/tcp compassionate_blackwell
a179a48ca9f6 aspnetcoreonnano "dotnet WebApplicatio" 0.0.0.0:86->82/tcp determined_stallman
170a8afa1b8b aspnetcoreonnano "dotnet WebApplicatio" 0.0.0.0:89->82/tcp agitated_northcutt
afafdbead8b0 aspnetcoreonnano "dotnet WebApplicatio" 0.0.0.0:88->82/tcp naughty_ramanujan
2cf45ea2f008 a7fa77b6f1d4 "dotnet WebApplicatio" 0.0.0.0:97->82/tcp sleepy_hodgkin

Kesimpulan

Sekali lagi, lihat artikel Michael di mana ia menggunakan Docker Compose untuk memunculkan sampel ASP.NET Music Store dengan SQL Express di satu Windows Container dan ASP.NET Core di yang lain serta blog Steve Lasker (sebenarnya seluruh blognya berwarna emas ) untuk membuat image Docker yang dioptimalkan dengan ASP.NET Core.

IMAGE ID            RESPOSITORY                   TAG                 SIZE
0ec4274c5571 web optimized 276.2 MB
f9f196304c95 web single 583.8 MB
f450043e0a44 microsoft/aspnetcore 1.0.1 266.7 MB
706045865622 microsoft/aspnetcore-build 1.0.1 896.6 MB

Steve menunjukkan sejumlah teknik yang memungkinkan Anda mendapatkan hasil maksimal dari Docker dan ASP.NET Core.

Hasil dari semua ini berarti (IMHO) Anda dapat menggunakan ASP.NET Core:

  • ASP.NET Core di Linux
    • di dalam container Docker
    • di Cloud mana pun
  • ASP.NET Core di Windows, Windows Server, Server Core, dan Nano Server.
    • di dalam wadah jendela Docker
    • di dalam wadah Hyper-V yang diisolasi Docker

Ini berarti Anda dapat memilih tingkat dukungan fitur dan ukuran untuk mengoptimalkan kepadatan dan kenyamanan server. Setelah semua perkakas (orang-orang Docker dengan Docker untuk Windows dan orang-orang VS dengan Visual Studio Docker Tools) dipanggang, kita akan memiliki proses debug dan alur kerja yang bagus dari dev hingga produksi.

Apa yang telah Anda lakukan dengan Docker, Containers, dan ASP.NET Core? Suarakan di komentar.

Sponsor: Terima kasih kepada Redgate minggu ini! Temukan alat perbandingan SQL Server paling tepercaya di dunia. Nikmati uji coba gratis SQL Bandingkan, standar industri untuk membandingkan dan menerapkan skema SQL Server.


Docker
  1. Apa itu Docker (dan wadah Linux?)

  2. Mengoptimalkan ukuran Gambar ASP.NET Core Docker

  3. Cara menulis daemon linux dengan .Net Core

  1. Memantau host Linux dan Windows dengan Glances

  2. Salin file dari linux ke windows share dengan C# (.NET core)

  3. Enkripsi hard drive eksternal dengan akses baca+tulis di Windows dan Linux

  1. Pantau dan Kelola Kontainer Docker dengan Portainer.io (alat GUI) – Bagian-2

  2. Pantau dan Kelola Kontainer Docker dengan Portainer.io (alat GUI) – Bagian-1

  3. Cara Menginstal WordPress di Docker (Windows, macOS dan Linux)