Apakah mungkin menjalankan Windows Containers di Linux ? Skenario ini didasarkan pada aplikasi yang ditulis dalam .NET ( jaringan lama) dan pengguna Linux yang ingin menjalankan ini dengan Docker untuk menyediakan net462
API tertulis di Internet localhost
.
Saya menggunakan versi beta dari Docker Desktop untuk Windows
Jika tidak, lalu mengapa Windows dapat menjalankan wadah Linux dan tidak sebaliknya?
EDIT:
Karena beberapa waktu telah berlalu dan pertanyaan ini adalah yang populer. Saya ingin menambahkan satu catatan di sini bahwa solusinya adalah dengan menggunakan standar baru. Itu memungkinkan saya untuk mengemas 4.6.2
kerangka kerja ke perpustakaan baru.
linux
docker
docker-for-windows
windows-container
docker-desktop
Sebastian 506563
sumber
sumber
Jawaban:
Pembaruan3: 06.2019 Beberapa komentar mengatakan bahwa jawabannya tidak jelas, saya akan mencoba mengklarifikasi.
TL; DR:
T: Dapatkah kontainer Windows berjalan di Linux?
A: Tidak. Mereka tidak bisa. Wadah menggunakan sumber daya dan driver Sistem Operasi yang mendasarinya, sehingga wadah Windows hanya dapat berjalan di Windows, dan wadah Linux dapat berjalan di Linux saja.
T: Tapi bagaimana dengan Docker untuk Windows? Atau solusi berbasis VM lainnya?
A: Docker untuk Windows memungkinkan Anda untuk mensimulasikan menjalankan wadah Linux di Windows , tetapi di bawah tenda Linux VM dibuat, sehingga wadah Linux masih berjalan di Linux, dan wadah Windows berjalan di Windows .
Bonus: Baca artikel yang sangat bagus ini tentang menjalankan wadah docker Linux di Windows.
T: Jadi, apa yang harus saya lakukan dengan aplikasi .Net Framework 462, jika saya ingin menjalankan dalam wadah?
A: Tergantung. Berikut beberapa rekomendasi:
Jika Anda tidak dapat bermigrasi ke .Net Core - Seperti yang disebutkan @Sebastian - Anda dapat mengonversi perpustakaan Anda ke .Net Standard, dan memiliki 2 versi aplikasi - satu di .Net Framework 4.6.2, dan satu di .Net Core - tidak selalu jelas, Visual Studio mendukungnya dengan cukup baik (dengan multi-penargetan), tetapi beberapa dependensi memerlukan perawatan ekstra.
(Kurang disarankan) Dalam beberapa kasus, Anda dapat menjalankan wadah windows. Wadah Windows menjadi semakin dewasa, dengan dukungan yang lebih baik di platform seperti Kubernetes. Tetapi untuk dapat menjalankan kode .Net Framework, Anda masih harus menjalankan gambar dasar "Server Core", yang menempati sekitar 1,4 GB. Dalam kasus langka yang sama, Anda dapat memigrasi kode Anda ke .Net Core, tetapi masih berjalan di server Windows Nano, dengan ukuran gambar 95 MB.
Meninggalkan juga pembaruan lama untuk riwayat
Pembaruan2: 08.2018 Jika Anda menggunakan Docker-for-Windows, sekarang Anda dapat menjalankan kedua wadah windows dan linux secara bersamaan : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- dan-linux-container-secara bersamaan /
Bonus: Tidak terkait langsung dengan pertanyaan, tetapi Anda sekarang dapat menjalankan tidak hanya wadah linux itu sendiri, tetapi juga orkestra seperti kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-desktop-stable-channel /
Diperbarui pada 2018:
Jawaban asli secara umum benar, TETAPI beberapa bulan yang lalu, buruh pelabuhan menambahkan fitur eksperimental LCOW ( repositori github resmi ).
Dari pos ini :
Asli:
Seperti disebutkan dalam komentar oleh @PanagiotisKanavos, kontainer bukan untuk virtualisasi, dan mereka menggunakan sumber daya dari mesin host . Akibatnya, untuk saat ini windows container tidak dapat menjalankan "apa adanya" pada mesin linux.
Tapi - Anda bisa melakukannya dengan menggunakan VM - karena berfungsi di windows. Anda dapat menginstal windows VM di host linux Anda, yang akan memungkinkan untuk menjalankan wadah windows.
Dengan itu, IMHO menjalankannya dengan cara ini di lingkungan PROD tidak akan menjadi ide terbaik.
Juga, jawaban ini memberikan perincian lebih lanjut.
sumber
Tidak, Anda tidak dapat menjalankan kontainer windows secara langsung di Linux.
Tapi Anda bisa menjalankan Linux di Windows.
Windows Server / 10 dikemas dengan gambar dasar dari ubuntu OS ( setelah september 2016 paket layanan beta ). Itulah alasan Anda dapat menjalankan linux di windows dan tidak bijaksana. Lihat di sini. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
Anda dapat mengubah antara wadah OS Linux dan windows dengan mengklik kanan pada buruh pelabuhan di menu baki.
sumber
Tidak seperti Virtualisasi, containerisasi menggunakan os host yang sama. Jadi wadah yang dibangun di linux tidak bisa dijalankan di windows dan sebaliknya.
Di windows, Anda harus mengambil bantuan virtuallization (menggunakan Hyper-v) untuk memiliki os yang sama dengan os wadah Anda dan kemudian Anda harus dapat menjalankan yang sama.
Docker untuk windows adalah aplikasi serupa yang dibangun di atas Hyper-v dan membantu menjalankan linux docker container di windows. Tapi sejauh yang saya tahu, tidak ada yang membantu menjalankan windows windows di linux.
sumber
Kontainer menggunakan kernel OS. Windows Container menggunakan proses untuk menjalankan. Jadi secara teoritis, Windows Containers tidak dapat berjalan di Linux.
Namun ada solusi yang memanfaatkan solusi VMstyle.
Saya telah menemukan solusi ini yang menggunakan Vagrant dan Packer di Mac, jadi itu harus bekerja untuk Linux juga: https://github.com/StefanScherer/windows-docker-machine
sumber
Solusi 1 - Menggunakan VirtualBox
Seperti yang disarankan Muhammad Sahputra dalam posting ini , dimungkinkan untuk menjalankan OS Windows di dalam VirtualBox (menggunakan VBoxHeadless - tanpa antarmuka grafis) di dalam wadah Docker .
Juga, pengaturan NAT di dalam konfigurasi jaringan VM dapat melakukan penerusan port yang memberi Anda kemampuan untuk melewati lalu lintas apa pun yang datang ke dan dari wadah Docker. Ini pada akhirnya, dalam perspektif yang luas, memungkinkan Anda untuk menjalankan layanan berbasis Windows di atas mesin Linux.
Mungkin ini bukan kasus penggunaan khas wadah Docker, tapi ini jelas pendekatan yang menarik untuk masalah ini.
Solusi 2 - Menggunakan Wine
Untuk aplikasi sederhana dan mungkin lebih rumit, Anda dapat mencoba menggunakan anggur di dalam wadah buruh pelabuhan .
Halaman hub docker ini dapat membantu Anda mencapai tujuan.
Saya berharap Docker akan segera merilis solusi asli, seperti yang mereka lakukan dengan mesin docker pada Windows beberapa tahun yang lalu.
sumber
Anda dapat menggunakan Windows Containers di dalam mesin virtual (OS tamu harus sesuai dengan persyaratan - Windows 10 Pro atau Windows 2016).
Misalnya Anda dapat menggunakan VirtualBox , cukup aktifkan Hyper-V di dalam System / Acceleration / Paravirtualization Interface.
Setelah itu jika Docker tidak memulai karena kesalahan, gunakan "Alihkan ke wadah Windows ..." di pengaturan.
(ini dapat dipindahkan sebagai komentar untuk jawaban yang diterima, tetapi saya tidak memiliki reputasi yang cukup untuk melakukannya)
sumber
Sementara Docker untuk Windows benar-benar dapat menjalankan wadah Linux, sebaliknya, sementara secara teoritis mungkin, tidak dilaksanakan karena alasan praktis.
Yang paling jelas adalah, sementara Docker untuk Windows dapat menjalankan Linux VM secara bebas, Docker untuk Linux akan memerlukan lisensi Windows untuk menjalankannya di dalam VM.
Juga, Linux benar-benar dapat disesuaikan, sehingga Linux VM yang digunakan oleh Docker untuk Windows telah dipreteli menjadi hanya beberapa MB, hanya mengandung minimum yang diperlukan untuk menjalankan kontainer, sementara distribusi Windows terkecil yang tersedia adalah sekitar 1,5 GB. Ini mungkin bukan ukuran yang tidak praktis, tetapi jauh lebih rumit daripada Linux pada Windows.
Meskipun tentu saja mungkin bagi seseorang untuk menjual variasi Docker untuk Linux yang dibundel dengan lisensi Windows dan siap untuk menjalankan kontainer Windows di Linux (dan saya tidak tahu apakah produk tersebut ada), intinya adalah bahwa Anda tidak dapat menghindari membayar harga penguncian vendor Windows: baik dalam uang maupun ruang penyimpanan.
sumber
Anda dapat menjalankan MSSQL dan .NET Core di Linux, dan karenanya di dalam wadah Linux, saat ini.
Lihat: https://hub.docker.com/r/microsoft/mssql-server-linux/
Juga: https://hub.docker.com/r/microsoft/dotnet/
Pertanyaan langsung untuk jawaban Anda, tentu saja, kecuali ada versi yang dikompilasi khusus untuk Linux, tidak.
sumber
.NET Core
dan TIDAK.NET
- ini adalah dua lingkungan yang sangat berbeda.Wadah Windows tidak berjalan di Linux dan Anda tidak dapat menjalankan wadah Linux di Windows secara langsung.
sumber