Windows Konteynerleri Linux'ta barındırılabilir mi?


238

O çalıştırmak mümkün mü , Windows Kapları üzerinde Linux ? Senaryo, .NET'te yazılmış bir uygulamaya (eski ağ) ve üzerinde yazılı bir API sağlamak için Docker ile çalıştırmak isteyen Linux kullanıcısına dayanır .net462localhost

Windows için Docker Desktop'tan beta sürümünü kullanıyorum

Yanıtınız hayırsa, Windows neden Linux kapsayıcılarını çalıştırabilir, bunun tersini yapamazsınız?

DÜZENLE:

Bir süre geçtikçe ve bu soru popüler bir sorudur. Buraya geçici çözümün yeni netstandard'ı kullanmak olduğuna dair bir not eklemek istiyorum. Benim paketi için izin 4.6.2yeni kütüphaneye çerçeve.


4
Mümkün değil - Windows kapsayıcıları oluşturmak ve çalıştırmak için kapsayıcı desteğine sahip bir Windows sistemi gereklidir.
ajtrichards

5
Tamam, ama neden Windows linux kapsayıcılar çalıştırabilir? Şimdilik tam tersi yok mu?
Sebastian 506563

10
@ Sebastian506563 çünkü docker, Linux kapsayıcılarının Windows üzerinde çalışmasını sağlamak için perde arkasında VirtualBox sanallaştırması çalıştırıyor. Teorik olarak başka bir şekilde de mümkün olacağını tahmin ediyorum, sadece docker bunu uygulamadı.
Gregory Suvalian

5
VM'lerde her vm'nin kendi işletim sistemi vardır. Kaplarda, temel OS görüntüsü vardır ve her kap, tabanın üstüne yeni bir ince katman ekler. Liman işçisinde bu temel işletim sistemi linux tabanlı. yani windows konteyneriniz farklı olduğu için tabanı kullanamaz. blog.risingstack.com/…
xen-dara

3
@PanagiotisKanavos lütfen cevap yaz
Sebastian 506563

Yanıtlar:


162

Güncelleme3: 06.2019 Bazı yorumlar cevabın net olmadığını söylüyor, açıklığa kavuşturmaya çalışacağım.

TL; DR:

S: Windows kapsayıcıları Linux üzerinde çalışabilir mi?

C: Hayır. Yapamazlar. Kapsayıcılar temel İşletim Sistemi kaynaklarını ve sürücülerini kullanır, bu nedenle Windows kapsayıcıları yalnızca Windows üzerinde ve Linux kapsayıcıları yalnızca Linux üzerinde çalışabilir.

S: Peki Windows için Docker ne olacak? Veya diğer VM tabanlı çözümler?

A: Windows için Docker çalıştırmakta elde etmenizi sağlar Linux üzerinde kapları , Windows , ama başlık altında Linux VM yüzden hala oluşturulur Linux konteynerler Linux üzerinde çalışan ve Windows konteynerler Windows üzerinde çalışan .

Bonus: Windows'ta Linux docker kapsayıcılarını çalıştırmakla ilgili bu çok güzel makaleyi okuyun .

S: Peki, bir kapta çalıştırmak istersem .Net Framework 462 uygulamasıyla ne yapmalıyım?

A: bağlıdır. Birkaç öneri aşağıdaki:

  • Mümkünse .Net Core'a gidin. .Net Core, .Net Framework'ün en önemli özelliklerine destek sağladığı için .Net Framework 4.8 , .Net framework'ün son sürümü olacak
  • .Net Core'a geçemiyorsanız - @Sebastian'ın belirttiği gibi - kütüphanelerinizi .Net Standard'a dönüştürebilir ve bir .Net Framework 4.6.2 üzerinde ve .Net Core'da bir tane olmak üzere 2 uygulama sürümüne sahip olabilirsiniz. her zaman açıktır, Visual Studio bunu çok iyi destekler (çoklu hedefleme ile), ancak bazı bağımlılıklar ekstra bakım gerektirebilir.

  • (Daha az önerilir) Bazı durumlarda, Windows kapsayıcılarını çalıştırabilirsiniz. Windows kapsayıcılar gittikçe olgunlaşıyor ve Kubernetes gibi platformlarda daha iyi destek sağlıyor. Ancak .Net Framework kodunu çalıştırabilmek için, yaklaşık 1,4 GB alan "Sunucu Çekirdeği" temel görüntüsünde çalıştırmanız gerekir. Aynı nadir durumlarda, kodunuzu .Net Core'a taşıyabilirsiniz, ancak yine de 95 MB görüntü boyutuna sahip Windows Nano sunucularında çalıştırabilirsiniz.

Tarihin eski güncellemelerini de bırakmak

Güncelleme2: 08.2018 Windows için Docker kullanıyorsanız, şimdi hem windows hem de linux kapsayıcılarını aynı anda çalıştırabilirsiniz : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- ve-linux-konteynerler-eşzamanlı /

Bonus: Doğrudan soru ile ilgili değil, şimdi sadece linux konteynerin kendisini değil, aynı zamanda kubernetes gibi orkestratörü de çalıştırabilirsiniz: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-masaüstü-kararlı-kanal /

2018'de güncellendi:

Orijinal cevap genel olarak doğru, AMA birkaç ay önce, docker deneysel özellik LCOW ( resmi github deposu ) ekledi .

Gönderen bu yazı :

Windows için Docker zaten Linux kapsayıcıları çalıştırmıyor mu? Doğru. Windows için Docker, Hyper-V Moby Linux VM aracılığıyla Linux kapsayıcıları desteğiyle Linux veya Windows kapsayıcılar çalıştırabilir (Windows 17.10 için Docker'dan itibaren bu VM LinuxKit tabanlıdır).

Linux kapsayıcılarını LCOW ile çalıştırmak için kurulum, Hyper-V Linux VM'nin tüm kaplarınızla birlikte bir Linux Docker arka plan programı çalıştırdığı önceki mimariden çok daha basittir . LCOW ile Docker arka plan programı bir Windows işlemi olarak çalışır (Docker Windows kapsayıcılarını çalıştırırken olduğu gibi) ve bir Linux kapsayıcısını her başlattığınızda Docker, Linux çekirdeği, runc ve kap işlemleri ile VM çalıştıran minimal bir Hyper-V hipervizörü başlatır üstte çalışıyor.

Yalnızca bir Docker arka plan programı olduğundan ve bu arka plan programı artık Windows üzerinde çalıştığı için, Windows ve Linux Docker kapsayıcılarını aynı ağ ad alanında yan yana çalıştırmak mümkün olmayacaktır . Bu, Windows'ta Docker kullanıcıları için birçok heyecan verici geliştirme ve üretim senaryosunun kilidini açacaktır.

Orijinal:

@PanagiotisKanavos'un yorumlarında belirtildiği gibi, kaplar sanallaştırma için değildir ve ana makinenin kaynaklarını kullanmaktadır . Sonuç olarak, şimdilik windows konteyner linux makinesinde olduğu gibi çalışamaz.

Ancak - Windows üzerinde çalıştığı için VM kullanarak yapabilirsiniz. Linux ana makinenize Windows kapsayıcılarını çalıştıracak Windows VM'yi yükleyebilirsiniz.

Bununla beraber, IMHO bunu PROD ortamında bu şekilde çalıştırmak en iyi fikir olmayacaktır.

Ayrıca, bu cevap daha fazla ayrıntı sağlar.


12
Bağlantılı cevap aslında bununla ilgili herhangi bir ayrıntı sağlamaz - sadece Linux kapsayıcılarının Windows'ta (tersi) nasıl çalıştırılacağını açıklar. Docker'ı bir Windows VM içinde çalıştırmak mümkündür, ancak bunun için iç içe sanallaştırma desteğine ihtiyacınız vardır. Bu, VMware ile çalıştığı, ancak Virtualbox ile çalışmadığı anlamına gelir.
Ralf

3
Cevapta çok fazla kelime var ama soruya cevap vermiyor gibi görünüyor.
Kyberias

2
Bu sorunun cevabı değil. O kadar yüksek sırada olmamalı
Amorf

2
Bu, bu sorunun cevabı DEĞİLDİR. Linux'ta docker çalıştırmak, Windows'ta docker çalıştırmaktan MARKEDLY farklıdır. Bu neden bir yanıt olarak işaretlendi? \
Ani

Kaplar = belirli bir işletim sistemi için oluşturulmuş fark yalıtımlı uygulamaları verimli bir şekilde çalıştırır, daha az bellek, disk alanı, ek yük, daha verimli donanım kullanımı VM'leri = kullanım durumu .. çeşitli kullanım durumları için tüm işletim sistemlerini çalıştırır ..., donanım kullanımı iyidir (Her işletim sistemi için farklı bir makine satın almama gerek yok ... aslında benim kullanım durumum için birden fazla işletim sistemine ihtiyacım varsa), ancak kapsayıcılara kıyasla çok zor değil. Joyent CTO tarafından harika video: youtube.com/watch?v=coFIEH3vXPw
cacoder

16

Hayır, Windows kapsayıcılarını doğrudan Linux üzerinde çalıştıramazsınız.

Ancak Linux'u Windows üzerinde çalıştırabilirsiniz.

Windows Server / 10, ubuntu OS'nin temel görüntüsüyle paketlenmiştir ( Eylül 2016 beta hizmet paketinden sonra ). Linux'u akıllıca değil, Windows'da çalıştırabilmenizin nedeni budur. Buraya bir göz atın. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Tepsi menüsündeki bağlantı istasyonuna sağ tıklayarak OS kapsayıcıları Linux ve pencereleri arasında geçiş yapabilirsiniz.

resim açıklamasını buraya girin

resim açıklamasını buraya girin


13
OP, Windows kapsayıcılarını Linux sunucularında çalıştırmak istiyor, bu yüzden bu soruya cevap vermiyor. Ama yorum yapmadan downvote veren insanları sevmiyorum, bu yüzden upvote veriyorum
daisy

1
@Karthikeyan V: Çünkü bu sorunun cevabı değil.
Stefan Steiger

Daha önce ne söylediğinden emin değilim ama ilk ifade yapamayacağınızı, ikincisi ise yapabileceğinizi söylüyor. Muhtemelen bir eksik ya da kafa karıştırıcı bir şey.
StingyJack

9

Sanallaştırmanın aksine, kapsayıcılık aynı ana bilgisayar işletim sistemini kullanır. Bu nedenle linux üzerine inşa edilen konteyner pencerelerde çalıştırılamaz ve tersi de geçerlidir.

Pencerelerde konteynırlarınızın işletim sistemiyle aynı işletim sistemine sahip olmak için sanallaştırma (Hyper-v kullanarak) kullanmanız ve sonra da aynı şekilde çalışabilmeniz gerekir.

Windows için Docker, Hyper-v üzerine kurulmuş ve linux docker kapsayıcısını pencerelerde çalıştırmaya yardımcı olan benzer bir uygulamadır. Ama bildiğim kadarıyla, linux üzerinde pencere kaplarını çalıştırmaya yardımcı olan hiçbir şey yok.


9

Kapsayıcılar işletim sistemi çekirdeğini kullanır. Windows Container, çalıştırmak için işlemleri kullanır. Yani teorik olarak konuşursak Windows Kapsayıcıları Linux üzerinde çalışamaz.

Ancak VMstyle çözümlerini kullanan geçici çözümler vardır.

Mac'te Vagrant ve Packer kullanan bu çözümü buldum, bu yüzden Linux için de çalışmalı: https://github.com/StefanScherer/windows-docker-machine

Bu Vagrant ortamı, MacBook'unuzda Windows kaplarıyla çalışmak için bir Docker Makinesi oluşturur. Mac için Docker Linux kapsayıcıları ile Windows kapsayıcıları arasında kolayca geçiş yapabilirsiniz.

Bash komutlarını çalıştırma resim açıklamasını buraya girin

başsız Vagrant kutusunu oluşturma

$ 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

Docker Makinesini Oluşturun

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

Windows kapsayıcılarına geç

$ eval $(docker-machine env 2019)

7

Çözüm 1 - VirtualBox Kullanımı

As Muhammed Sahputra önerilen bu yazı , çalıştırmak mümkündür , Windows işletim sistemi içerisindeki VirtualBox içindeki - (grafik arayüzü olmadan VBoxHeadless kullanarak) Docker konteyner .

Ayrıca, VM ağ yapılandırmaları içindeki bir NAT kurulumu, Docker kapsayıcısına gelen ve Docker kapsayıcısından gelen trafiği geçebilmenizi sağlayan bir bağlantı noktası iletme yapabilir. Bu, sonunda, geniş bir perspektifle, Linux makinesinin üstünde herhangi bir Windows tabanlı hizmeti çalıştırmanıza izin verir.

Belki de bu bir Docker konteynerinin tipik bir kullanım durumu değildir, ancak kesinlikle soruna ilginç bir yaklaşımdır.


Çözüm 2 - Şarap Kullanımı

Basit uygulamalar ve belki de daha karmaşık olması için, bir liman işçisi konteynerinin içinde şarap kullanmayı deneyebilirsiniz .

Bu docker hub sayfası hedefinize ulaşmanıza yardımcı olabilir.


Umarım Docker, birkaç yıl önce Windows'ta docker-machine ile yaptıkları gibi yakında yerel bir çözüm sunacaktır.


6

Sanal bir makinenin içinde Windows Kapsayıcılar kullanabilirsiniz (konuk işletim sistemi gereksinimlere uymalıdır - Windows 10 Pro veya Windows 2016).

Örneğin VirtualBox'ı kullanabilirsiniz , System / Acceleration / Paravirtualization Interface içinde Hyper-V'yi etkinleştirmeniz yeterlidir.

Bundan sonra Docker bir hata nedeniyle başlamazsa, ayarlarda "Windows kapsayıcılarına geç ..." seçeneğini kullanın.

(bu, kabul edilen cevaba bir yorum olarak taşınabilir, ancak bunu yapmak için yeterli itibarım yok)


3

Windows için Docker, Linux kapsayıcılarını mükemmel bir şekilde çalıştırabilirken, teorik olarak mümkün olsa da, pratik nedenlerden dolayı uygulanmaz.

En bariz olanı, Windows için Docker bir Linux VM'sini özgürce çalıştırabilirken, Linux için Docker'ın bir VM içinde çalıştırmak için bir Windows lisansı gerektirmesi.

Ayrıca, Linux tamamen özelleştirilebilir, bu nedenle Windows için Docker tarafından kullanılan Linux VM, yalnızca kapları çalıştırmak için gereken minimum değeri içeren birkaç MB'ye kadar sıyrılmışken, mevcut en küçük Windows dağıtımı yaklaşık 1,5 GB'dir. Uygulanamaz bir boyut olmayabilir, ancak Windows muadili Linux'tan çok daha hantaldır.

Birisinin bir Windows lisansı ile paketlenmiş ve Linux altında Windows kapsayıcılarını çalıştırmaya hazır bir Linux Docker varyasyonu satması kesinlikle mümkün olsa da (ve bu tür bir ürünün olup olmadığını bilmiyorum), sonuçta kaçınamamanız Windows satıcısı kilitleme fiyatını ödeme: hem para hem de depolama alanında.


0

Bugünlerde MSSQL ve .NET Core'u Linux'ta ve dolayısıyla Linux kapsayıcılarının içinde çalıştırabilirsiniz.

Bkz. Https://hub.docker.com/r/microsoft/mssql-server-linux/

Ayrıca: https://hub.docker.com/r/microsoft/dotnet/

Cevabınıza doğrudan soru, özellikle Linux için derlenmiş bir sürüm olmadığı sürece, hayır.


3
Bu doğrudur - ancak bunun soru ile ilgisi yoktur. Ayrıca MS-SQL motordan daha fazlasıdır (Linux'ta bu arada filestream veya R olmadan gelir - bu yüzden tüm motor bile değildir).
Stefan Steiger

Bir adım önde düşünmelisin ... neden soruyor? Eğer soruyorsa, bunlardan birini çalıştırmak istiyorsa: voila.
dagelf

2
Mümkün. Ancak IMHO, muhtemelen soruyu soruyor çünkü zaten bunu yaptı ve şimdi Linux'ta SSRS / SSAS veya ReportViewer gibi bir web formu kontrolü gibi şeyler çalıştırması gerekiyor.
Stefan Steiger

Docker image microsoft / dotnet eski .Net
4.x'ten

3
Onlar destekliyor .NET Coreve DEĞİL .NET - bunlar tamamen farklı iki ortam.
Slavik Meltser

-1

Windows kapsayıcıları Linux üzerinde çalışmıyor ve ayrıca Windows üzerinde Linux kapsayıcılarını doğrudan çalıştıramazsınız.


6
Biraz detaylandırabilir misin?
Matthieu

18
Linux konteynırlarını 10
Kugel

2
O zaman doğru olduğunu düşündüğüm için bu adama oy verdim. Ancak, artık Linux kapsayıcılarını Windows'ta Docker'da çalıştırabilirsiniz (Docker, MobyLinux adlı bir VM'de çalışır).
JakeJ

Aslında Windows Linux kapsayıcılarını çalıştırmak için küçük bir Linux VM çalıştırır. görmek için hyper-v kaynaklarınızı kontrol edin
Tuğrul Karakaya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.