Memigrasikan Aplikasi MVC ASP.NET ke Kontainer Windows
Menjalankan aplikasi berbasis .NET Framework yang ada di kontainer Windows tidak memerlukan perubahan apa pun pada aplikasi Anda. Untuk menjalankan aplikasi di kontainer Windows, Anda membuat gambar Docker yang berisi aplikasi dan memulai kontainer. Topik ini menjelaskan cara mengambil aplikasi MVC ASP.NET yang ada dan menyebarkannya dalam kontainer Windows.
Anda mulai dengan aplikasi MVC ASP.NET yang ada, lalu membangun aset yang diterbitkan menggunakan Visual Studio. Anda menggunakan Docker untuk membuat gambar yang berisi dan menjalankan aplikasi Anda. Anda akan menelusuri situs yang berjalan dalam kontainer Windows dan memverifikasi bahwa aplikasi berfungsi.
Artikel ini mengasumsikan pemahaman dasar tentang Docker. Anda dapat mempelajari tentang Docker dengan membaca Gambaran umum Docker.
Aplikasi yang akan Anda jalankan dalam kontainer adalah situs web sederhana yang menjawab pertanyaan secara acak. Aplikasi ini adalah aplikasi MVC dasar tanpa autentikasi atau penyimpanan database; ini memungkinkan Anda fokus pada pemindahan tingkat web ke kontainer. Topik di masa mendatang akan menunjukkan cara memindahkan dan mengelola penyimpanan persisten dalam aplikasi kontainer.
Memindahkan aplikasi Anda melibatkan langkah-langkah berikut:
- Membuat tugas publikasi untuk membangun aset untuk gambar.
- Membangun gambar Docker yang akan menjalankan aplikasi Anda.
- Memulai kontainer Docker yang menjalankan gambar Anda.
- Memverifikasi aplikasi menggunakan browser Anda.
Aplikasi yang sudah selesai ada di GitHub.
Prasyarat
Mesin pengembangan harus memiliki perangkat lunak berikut:
- Windows 10 Anniversary Update (atau lebih tinggi) atau Windows Server 2016 (atau lebih tinggi)
- Docker untuk Windows - versi Stabil 1.13.0 atau 1.12 Beta 26 (atau versi yang lebih baru)
- Visual Studio 2017
Penting
Jika Anda menggunakan Windows Server 2016, ikuti instruksi untuk Penyebaran Host Kontainer - Windows Server.
Setelah menginstal dan memulai Docker, klik kanan pada ikon baki dan pilih Beralih ke kontainer Windows. Ini diperlukan untuk menjalankan gambar Docker berdasarkan Windows. Perintah ini membutuhkan waktu beberapa detik untuk dijalankan:
Menerbitkan skrip
Kumpulkan semua aset yang perlu Anda muat ke dalam gambar Docker di satu tempat. Anda dapat menggunakan perintah Visual Studio Publish untuk membuat profil publikasi untuk aplikasi Anda. Profil ini akan menempatkan semua aset dalam satu pohon direktori yang Anda salin ke gambar target Anda nanti dalam tutorial ini.
Langkah-langkah Penerbitan
- Klik kanan pada proyek web di Visual Studio, dan pilih Terbitkan.
- Klik tombol Profil kustom, lalu pilih Sistem File sebagai metode .
- Pilih direktori. Menurut konvensi, sampel yang diunduh menggunakan
bin\Release\PublishOutput
.
Buka bagian Opsi Penerbitan File dari tab Pengaturan . Pilih Prakompilasi selama penerbitan. Pengoptimalan ini berarti Anda akan mengkompilasi tampilan dalam kontainer Docker, Anda menyalin tampilan yang telah dikompilasi sebelumnya.
Klik Terbitkan, dan Visual Studio akan menyalin semua aset yang diperlukan ke folder tujuan.
Membuat gambar
Buat file baru bernama Dockerfile untuk menentukan gambar Docker Anda. Dockerfile berisi instruksi untuk membangun gambar akhir dan menyertakan nama gambar dasar apa pun, komponen yang diperlukan, aplikasi yang ingin Anda jalankan, dan gambar konfigurasi lainnya. Dockerfile adalah input ke docker build
perintah yang membuat gambar.
Untuk latihan ini, Anda akan membangun gambar berdasarkan gambar yang microsoft/aspnet
terletak di Docker Hub.
Gambar dasar, mcr.microsoft.com/dotnet/framework/aspnet:4.8
, adalah gambar Windows Server. Ini berisi Windows Server Core, IIS, dan ASP.NET 4.8. Saat Anda menjalankan gambar ini di kontainer Anda, gambar tersebut akan secara otomatis memulai IIS dan menginstal situs web.
Dockerfile yang membuat gambar Anda terlihat seperti ini:
# The `FROM` instruction specifies the base image. You are
# extending the `mcr.microsoft.com/dotnet/framework/aspnet:4.8` image.
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8
# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot
Tidak ada ENTRYPOINT
perintah dalam Dockerfile ini. Anda tidak membutuhkannya. Saat menjalankan Windows Server dengan IIS, proses IIS adalah titik masuk, yang dikonfigurasi untuk dimulai dalam gambar dasar aspnet.
Jalankan perintah build Docker untuk membuat gambar yang menjalankan aplikasi ASP.NET Anda. Untuk melakukan ini, buka jendela PowerShell di direktori proyek Anda dan ketik perintah berikut di direktori solusi:
docker build -t mvcrandomanswers .
Perintah ini akan membangun gambar baru menggunakan instruksi di Dockerfile Anda, penamaan (-t menandai) gambar sebagai mvcrandomanswers. Ini mungkin termasuk menarik gambar dasar dari Docker Hub, lalu menambahkan aplikasi Anda ke gambar tersebut.
Setelah perintah selesai, Anda dapat menjalankan docker images
perintah untuk melihat informasi tentang gambar baru:
REPOSITORY TAG IMAGE ID CREATED SIZE
mvcrandomanswers latest 86838648aab6 2 minutes ago 10.1 GB
ID GAMBAR akan berbeda pada komputer Anda. Sekarang, mari kita jalankan aplikasi.
Memulai kontainer
Mulai kontainer dengan menjalankan perintah berikut docker run
:
docker run -d --name randomanswers mvcrandomanswers
Argumen -d
memberi tahu Docker untuk memulai gambar dalam mode terlepas. Itu berarti gambar Docker berjalan terputus dari shell saat ini.
Dalam banyak contoh docker, Anda mungkin melihat -p untuk memetakan port kontainer dan host. Gambar aspnet default telah mengonfigurasi kontainer untuk mendengarkan port 80 dan mengeksposnya.
--name randomanswers
memberikan nama untuk kontainer yang sedang berjalan. Anda dapat menggunakan nama ini alih-alih ID kontainer di sebagian besar perintah.
mvcrandomanswers
adalah nama gambar yang akan dimulai.
Memverifikasi di browser
Setelah kontainer dimulai, sambungkan ke kontainer yang sedang berjalan menggunakan http://localhost
dalam contoh yang ditampilkan. Ketik URL tersebut ke browser Anda, dan Anda akan melihat situs yang sedang berjalan.
Catatan
Beberapa VPN atau perangkat lunak proksi mungkin mencegah Anda menavigasi ke situs Anda. Anda dapat menonaktifkannya untuk sementara waktu untuk memastikan kontainer Anda berfungsi.
Direktori sampel di GitHub berisi skrip PowerShell yang menjalankan perintah ini untuk Anda. Buka jendela PowerShell, ubah direktori ke direktori solusi Anda, dan ketik:
./run.ps1
Perintah di atas membangun gambar, menampilkan daftar gambar di komputer Anda, dan memulai kontainer.
Untuk menghentikan kontainer Anda, terbitkan docker stop
perintah:
docker stop randomanswers
Untuk menghapus kontainer, terbitkan docker rm
perintah:
docker rm randomanswers