Bisakah Windows Containers di-host di linux?

239

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 net462API 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.2kerangka kerja ke perpustakaan baru.

Sebastian 506563
sumber
4
Tidak mungkin - Untuk membuat dan menjalankan kontainer Windows, diperlukan sistem Windows dengan dukungan container.
ajtrichards
5
Ok, tapi mengapa Windows bisa menjalankan wadah linux? Tidak ada sebaliknya untuk saat ini?
Sebastian 506563
10
@ Sebastian506563 karena buruh pelabuhan menjalankan virtualisasi VirtualBox di belakang layar untuk membuat wadah Linux untuk berjalan pada Windows. Saya akan menebak secara teoritis akan mungkin sebaliknya, hanya buruh pelabuhan tidak menerapkannya.
Gregory Suvalian
5
Dengan VM, masing-masing vm memiliki sistem operasi sendiri. Dengan wadah, ada gambar OS dasar dan setiap wadah menambahkan lapisan tipis baru di atas dasar. Di docker ini berbasis OS linux. yaitu wadah windows Anda tidak dapat menggunakan basis karena berbeda. blog.risingstack.com/…
xen-dara
3
@PanagiotisKanavos tolong tulis jawaban
Sebastian 506563

Jawaban:

162

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 memungkinkan - pindah ke .Net Core. Sejak .Net Core menghadirkan dukungan untuk sebagian besar fitur utama .Net Framework, dan .Net Framework 4.8 akan menjadi versi terakhir dari .Net framework
  • 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 :

Bukankah Docker untuk Windows sudah menjalankan wadah Linux? Betul sekali. Docker untuk Windows dapat menjalankan Linux atau wadah Windows, dengan dukungan untuk wadah Linux melalui Hyper-V Moby Linux VM (pada Docker untuk Windows 17.10 VM ini didasarkan pada LinuxKit).

Pengaturan untuk menjalankan wadah Linux dengan LCOW jauh lebih sederhana dari arsitektur sebelumnya di mana VM Hyper-V Linux menjalankan daemon Linux Docker, beserta semua wadah Anda. Dengan LCOW, daemon Docker berjalan sebagai proses Windows (sama seperti ketika menjalankan Docker Windows container), dan setiap kali Anda memulai container Linux Docker meluncurkan hypervisor Hyper-V minimal yang menjalankan VM dengan kernel Linux, runc, dan proses container berjalan di atas.

Karena hanya ada satu daemon Docker, dan karena daemon itu sekarang berjalan di Windows, saya akan segera dapat menjalankan kontainer Windows dan Linux Docker secara berdampingan, dalam ruang nama jaringan yang sama . Ini akan membuka banyak skenario pengembangan dan produksi yang menarik untuk pengguna Docker di Windows.

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.

evgenyl
sumber
12
Jawaban yang ditautkan sebenarnya tidak memberikan perincian tentang ini - hanya menjelaskan cara menjalankan wadah Linux pada Windows (kebalikannya). Dimungkinkan untuk menjalankan Docker di dalam Windows VM, tetapi Anda memerlukan dukungan virtualisasi bersarang untuk ini. Ini berarti ia bekerja dengan VMware, tetapi tidak Virtualbox.
Ralf
3
Banyak kata dalam jawaban tetapi sepertinya tidak menjawab pertanyaan.
Kyberias
2
Itu tidak menjawab pertanyaan. Seharusnya peringkatnya tidak terlalu tinggi
Amorf
2
Ini BUKAN jawaban untuk pertanyaan ini. Menjalankan buruh pelabuhan di Linux sangat berbeda dengan menjalankan buruh pelabuhan di Windows. Mengapa ini ditandai sebagai jawaban? \
Ani
Wadah = menjalankan aplikasi yang terisolasi secara efisien (yang dibangun untuk OS tertentu), lebih sedikit memori, ruang disk, overhead, pemanfaatan perangkat keras yang lebih efisien VMs = use case .. jalankan seluruh OS untuk berbagai kasus penggunaan ..., pemanfaatan perangkat keras baik (Saya tidak perlu membeli mesin diff untuk setiap OS..Jika saya benar-benar membutuhkan beberapa OS untuk kasus penggunaan saya), tetapi pemanfaatan yang sulit tidak sehebat kontainer. Video hebat oleh CTO dari Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder
16

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.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Karthikeyan VK
sumber
13
OP mencari untuk menjalankan wadah Windows di server Linux, jadi yang ini tidak menjawab pertanyaan. Tapi saya tidak suka orang-orang yang memberikan suara tanpa komentar, jadi saya memberikan suara positif
daisy
1
@Karthikeyan V: Karena itu bukan jawaban untuk pertanyaan.
Stefan Steiger
Saya tidak yakin apa yang dikatakannya sebelumnya tetapi pernyataan pertama mengatakan Anda tidak bisa dan yang kedua mengatakan Anda bisa. Ini mungkin yang hilang atau sesuatu yang membingungkan.
StingyJack
9

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.

sunil bhardwaj
sumber
9

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

Lingkungan Vagrant ini menciptakan Mesin Docker untuk bekerja di MacBook Anda dengan wadah Windows. Anda dapat dengan mudah beralih di antara wadah Docker untuk Mac Linux dan wadah Windows.

Menjalankan perintah bash masukkan deskripsi gambar di sini

membangun kotak Vagrant tanpa kepala

$ git clone https://github.com/StefanScherer/packer-windows
$ cd packer-windows

$ packer build --only=vmware-iso windows_2019_docker.json
$ vagrant box add windows_2019_docker windows_2019_docker_vmware.box

Buat Mesin Docker

$ git clone https://github.com/StefanScherer/windows-docker-machine
$ cd windows-docker-machine
$ vagrant up --provider vmware_fusion 2019

Beralih ke wadah Windows

$ eval $(docker-machine env 2019)
solusi
sumber
7

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.

Slavik Meltser
sumber
6

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)

BalintPogatsa
sumber
3

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.

lvella
sumber
0

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.

dagelf
sumber
3
Ini benar - tetapi tidak ada hubungannya dengan pertanyaan. Plus MS-SQL lebih dari sekadar mesin (yang pada Linux hadir tanpa filestream atau R - jadi bahkan bukan seluruh mesin).
Stefan Steiger
Anda harus berpikir selangkah lebih maju ... mengapa dia bertanya? Jika dia bertanya karena dia ingin menjalankan salah satunya: voila.
dagelf
2
Bisa jadi. Tapi IMHO, dia mungkin mengajukan pertanyaan karena dia sudah melakukan itu, dan sekarang dia harus menjalankan hal-hal seperti SSRS / SSAS atau kontrol bentuk web, seperti ReportViewer, di Linux.
Stefan Steiger
Docker image microsoft / dotnet adalah untuk .Net Core, yang merupakan sesuatu yang sama sekali berbeda dari .Net 4.x lama sehingga Anda tidak dapat menjalankan aplikasi yang dirancang untuk .Net tua di .Net Core
j123b567
3
Mereka mendukung .NET Coredan TIDAK .NET - ini adalah dua lingkungan yang sangat berbeda.
Slavik Meltser
-1

Wadah Windows tidak berjalan di Linux dan Anda tidak dapat menjalankan wadah Linux di Windows secara langsung.

Ehsan
sumber
6
Bisakah Anda sedikit menjelaskan?
Matthieu
18
Anda dapat menjalankan wadah linux pada win 10
Kugel
2
Saya memilih orang ini, karena saya pikir itu benar pada saat itu. Namun, Anda sekarang dapat menjalankan wadah Linux di Docker pada Windows (Docker berjalan dalam VM yang disebut MobyLinux).
JakeJ
Biasanya windows menjalankan VM Linux kecil untuk menjalankan wadah Linux. periksa sumber hiper-v Anda untuk melihatnya
Tuğrul Karakaya