คอนเทนเนอร์ Windows สามารถโฮสต์บน linux ได้หรือไม่


238

เป็นไปได้ไหมที่จะใช้งานWindows ContainersบนLinux ? สถานการณ์จะขึ้นอยู่กับแอปเขียนใน.NET (สุทธิเก่า) และผู้ใช้ลินุกซ์ที่ต้องการที่จะทำงานนี้กับนักเทียบท่าเพื่อให้net462API localhostเขียนบน

ฉันใช้รุ่นเบต้าจากDocker Desktop สำหรับ Windows

ถ้าไม่เช่นนั้นทำไม Windows จึงสามารถเรียกใช้คอนเทนเนอร์ของ Linux และไม่กลับกันได้

แก้ไข:

เมื่อเวลาผ่านไปและคำถามนี้เป็นคำถามยอดนิยม ฉันต้องการเพิ่มโน้ตหนึ่งที่นี่ว่าวิธีแก้ปัญหาคือใช้ netstandard ใหม่ มันอนุญาตให้ฉันแพ็ค4.6.2เฟรมเวิร์กในไลบรารีใหม่


4
ไม่สามารถทำได้ - ในการสร้างและเรียกใช้คอนเทนเนอร์ของ Windows จำเป็นต้องมีระบบ Windows ที่มีการรองรับคอนเทนเนอร์
ajtrichards

5
ตกลง แต่ทำไม Windows จึงสามารถเรียกใช้คอนเทนเนอร์ของ linux ได้ ไม่มีทางกลับกันสำหรับตอนนี้?
เซบาสเตียน 506563

10
@ Sebastian506563 เนื่องจากนักเทียบท่าใช้การจำลองเสมือน VirtualBox เบื้องหลังเพื่อสร้างคอนเทนเนอร์ Linux ให้ทำงานบน Windows ฉันคิดว่าในทางทฤษฎีมันจะเป็นไปได้ด้วยวิธีอื่นเช่นกันนักเทียบท่าไม่ได้ใช้มัน
Gregory Suvalian

5
ด้วย VMs แต่ละ vm มีระบบปฏิบัติการของตัวเอง ด้วยคอนเทนเนอร์จะมีอิมเมจระบบปฏิบัติการพื้นฐานและแต่ละคอนเทนเนอร์จะเพิ่มเลเยอร์ใหม่บาง ๆ บนฐาน ในนักเทียบท่า Linux OS ฐานนี้ใช้ เช่นที่เก็บ windows ของคุณไม่สามารถใช้ฐานได้เนื่องจากมันแตกต่างกัน blog.risingstack.com/…
xen-dara

3
@PanagiotisKanavos โปรดเขียนคำตอบ
เซบาสเตียน 506563

คำตอบ:


162

Update3: 06.2019 บางความคิดเห็นบอกว่าคำตอบไม่ชัดเจนฉันจะพยายามชี้แจง

TL; DR:

ถาม:คอนเทนเนอร์ Windows สามารถทำงานบน Linux ได้หรือไม่

ตอบ: ไม่ได้พวกเขาไม่สามารถ ตู้คอนเทนเนอร์กำลังใช้ทรัพยากรระบบปฏิบัติการและไดรฟ์เวอร์พื้นฐานดังนั้นคอนเทนเนอร์ Windows สามารถทำงานบน Windows เท่านั้นและคอนเทนเนอร์ Linux สามารถทำงานบน Linux ได้เท่านั้น

ถาม:แล้ว Docker สำหรับ Windows ล่ะ หรือโซลูชันที่ใช้ VM อื่น ๆ

ตอบ:นักเทียบท่าสำหรับ Windows อนุญาตให้คุณจำลองการใช้งานคอนเทนเนอร์LinuxบนWindowsแต่ภายใต้ฮูดที่ Linux VM สร้างขึ้นดังนั้นคอนเทนเนอร์ Linuxยังคงทำงานบน Linux และคอนเทนเนอร์ Windows กำลังทำงานบน WindowsWindows

โบนัส: อ่านบทความที่ดีมากเกี่ยวกับการใช้งาน Linux docker container บน Windows

ถาม:ฉันควรทำอย่างไรกับแอป. Net Framework 462 หากฉันต้องการรันในคอนเทนเนอร์

ตอบ:ขึ้นอยู่กับ ทำตามคำแนะนำหลายประการ:

  • หากเป็นไปได้ให้ย้ายไปที่. Net Core เนื่องจาก. Net Core ให้การสนับสนุนคุณสมบัติที่สำคัญที่สุดของ. Net Framework และ. Net Framework 4.8 จะเป็นเวอร์ชันสุดท้ายของ. Net Framework
  • หากคุณไม่สามารถย้ายไปที่. Net Core - ตามที่ @Sebastian พูดถึง - คุณสามารถแปลงไลบรารี่ของคุณเป็น. Net Standard และมีแอพ 2 เวอร์ชัน - หนึ่งแอพใน. Net Framework 4.6.2 และอีกหนึ่งใน. Net Core - ไม่ใช่ เห็นได้ชัดเสมอว่า Visual Studio รองรับมันค่อนข้างดี (ด้วยการกำหนดเป้าหมายหลายอย่าง) แต่การพึ่งพาบางอย่างอาจต้องการการดูแลเป็นพิเศษ

  • (แนะนำน้อยกว่า) ในบางกรณีคุณสามารถเรียกใช้ windows container บรรจุภัณฑ์ของ Windows กำลังเติบโตขึ้นเรื่อย ๆ พร้อมการรองรับแพลตฟอร์มที่ดีขึ้นเช่น Kubernetes แต่เพื่อให้สามารถเรียกใช้รหัส. Net Framework คุณยังคงต้องรันบนอิมเมจพื้นฐานของ "Server Core" ซึ่งใช้พื้นที่ประมาณ 1.4 GB ในกรณีที่เกิดขึ้นได้ยากเช่นเดียวกันคุณสามารถโยกย้ายรหัสของคุณไปยัง. Net Core แต่ยังคงทำงานบนเซิร์ฟเวอร์ Windows Nano ด้วยขนาดภาพ 95 MB

ออกจากยังอัปเดตเก่าสำหรับประวัติ

Update2: 08.2018 หากคุณใช้ Docker-for-Windows ตอนนี้คุณสามารถเรียกใช้ทั้ง windows และ linux containerพร้อมกันได้ที่ : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- และลินุกซ์คอนเทนเนอร์พร้อมกัน /

โบนัส:ไม่เกี่ยวข้องโดยตรงกับคำถาม แต่ตอนนี้คุณสามารถเรียกใช้ไม่เพียง แต่คอนเทนเนอร์ linux เท่านั้น แต่ยังมี orchestrator อย่าง kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in -docker-สก์ท็อปที่มีความเสถียรช่องทาง /

อัปเดตที่ 2018:

คำตอบทั่วไปโดยทั่วไปนั้นถูกต้องแต่หลายเดือนที่ผ่านมานักเทียบท่าได้เพิ่มฟีเจอร์การทดลอง LCOW (ที่เก็บอย่างเป็นทางการของ GitHub )

จากโพสต์นี้ :

Docker for Windows ไม่ได้ใช้งานคอนเทนเนอร์ Linux อยู่ใช่ไหม ถูกตัอง. Docker สำหรับ Windows สามารถเรียกใช้คอนเทนเนอร์ Linux หรือ Windows พร้อมรองรับคอนเทนเนอร์ Linux ผ่าน Hyper-V Moby Linux VM (เหมือน Docker สำหรับ Windows 17.10 VM นี้ใช้ LinuxKit)

การตั้งค่าสำหรับการใช้งานคอนเทนเนอร์ Linux ด้วย LCOW นั้นง่ายกว่าสถาปัตยกรรมก่อนหน้านี้มากซึ่ง Hyper-V Linux VM รัน Linux Docker daemon พร้อมกับคอนเทนเนอร์ทั้งหมดของคุณ ด้วย LCOW, Docker daemon จะทำงานเป็นกระบวนการ Windows (เช่นเดียวกับเมื่อเรียกใช้คอนเทนเนอร์ของ Docker Windows) และทุกครั้งที่คุณเริ่มต้นคอนเทนเนอร์ Linux นักเทียบท่าเปิดตัวไฮเปอร์ไวเซอร์ Hyper-V ขั้นต่ำที่เรียกใช้ VM ด้วยเคอร์เนล Linux, runc และกระบวนการคอนเทนเนอร์ วิ่งอยู่ด้านบน

เพราะมีเพียงหนึ่งภูตหางและเนื่องจากภูตว่าตอนนี้ทำงานบน Windows ฉันทีเร็ว ๆ นี้จะเป็นไปได้ที่จะเรียกใช้ Windows และ Linux หางภาชนะด้านโดยด้านใน namespace สิ่งนี้จะปลดล็อคสถานการณ์การพัฒนาและการผลิตที่น่าตื่นเต้นมากมายสำหรับผู้ใช้ Docker บน Windows

เดิม:

ตามที่ระบุไว้ในความคิดเห็นโดย @PanagiotisKanavos, ตู้คอนเทนเนอร์แบบนี้ไม่ได้สำหรับการทำงานแบบเสมือนและพวกเขากำลังใช้ทรัพยากรของเครื่องโฮสต์ ดังนั้นตอนนี้ windows container ไม่สามารถเรียกใช้ "as-is" บนเครื่อง linux

แต่ - คุณสามารถทำได้โดยใช้ VM - เพราะมันทำงานบน windows คุณสามารถติดตั้ง windows VM บนโฮสต์ linux ของคุณซึ่งจะอนุญาตให้เรียกใช้ windows container

ด้วย IMHO ที่รันด้วยวิธีนี้บนสภาพแวดล้อม PROD จะไม่เป็นความคิดที่ดีที่สุด

นอกจากนี้คำตอบนี้ให้รายละเอียดเพิ่มเติม


12
คำตอบที่เชื่อมโยงไม่ได้ให้รายละเอียดใด ๆ เกี่ยวกับเรื่องนี้ - เพียงแค่อธิบายวิธีการเรียกใช้คอนเทนเนอร์ Linux บน Windows (ผกผัน) เป็นไปได้ที่จะเรียกใช้ Docker ภายใน Windows VM แต่คุณต้องการการสนับสนุนการจำลองเสมือนแบบซ้อนสำหรับสิ่งนี้ ซึ่งหมายความว่าทำงานได้กับ VMware แต่ไม่ใช่ Virtualbox
Ralf

3
มีคำมากมายในคำตอบ แต่ดูเหมือนจะไม่ตอบคำถาม
Kyberias

2
มันไม่ได้ตอบคำถาม ไม่ควรได้รับการจัดอันดับสูงมาก
Amorphous

2
นี่ไม่ใช่คำตอบสำหรับคำถามนี้ การทำงานนักเทียบท่าบน Linux นั้นแตกต่างจากการรันนักเทียบท่าบน Windows ทำไมนี่จึงถูกทำเครื่องหมายเป็นคำตอบ?
Ani

คอนเทนเนอร์ = เรียกใช้แอพที่แยกได้อย่างมีประสิทธิภาพ (ที่สร้างขึ้นสำหรับระบบปฏิบัติการที่เฉพาะเจาะจง), หน่วยความจำน้อยกว่า, พื้นที่ดิสก์, ค่าใช้จ่าย, การใช้ฮาร์ดแวร์ที่มีประสิทธิภาพมากขึ้น VMs = กรณีการใช้ .. (ฉันไม่จำเป็นต้องซื้อเครื่อง diff สำหรับแต่ละระบบปฏิบัติการถ้าฉันต้องการระบบปฏิบัติการหลายอันสำหรับกรณีการใช้งานของฉัน) แต่การใช้งานอย่างหนักไม่มากเท่าเมื่อเทียบกับตู้คอนเทนเนอร์ วิดีโอยอดเยี่ยมโดย CTO of Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder

16

ไม่คุณไม่สามารถเรียกใช้ windows container บน Linux ได้โดยตรง

แต่คุณสามารถรัน Linux บน Windows ได้

Windows Server / 10 มาพร้อมกับอิมเมจพื้นฐานของ ubuntu OS ( หลังจากเซอร์วิสแพ็คของเดือนกันยายน 2559 ) นั่นคือเหตุผลที่คุณสามารถเรียกใช้ linux บน windows และไม่ฉลาดอื่น ๆ ลองดูที่นี่https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

คุณสามารถเปลี่ยนระหว่างคอนเทนเนอร์ของระบบปฏิบัติการ Linux และ windows ได้โดยคลิกขวาที่นักเทียบท่าในเมนูถาด

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


13
OP กำลังมองหาที่จะใช้คอนเทนเนอร์ Windows บนเซิร์ฟเวอร์ Linux แทนดังนั้นอันนี้จึงไม่ตอบคำถาม แต่ฉันไม่ชอบคนที่ให้ downvote โดยไม่มีความเห็นดังนั้นฉันจึงให้ upvote
เดซี่

1
@Karthikeyan V: เพราะมันไม่ใช่คำตอบสำหรับคำถาม
Stefan Steiger

ฉันไม่แน่ใจว่าจะพูดอะไรก่อนหน้า แต่ข้อความแรกบอกว่าคุณไม่สามารถและประโยคที่สองบอกว่าคุณทำได้ มันอาจจะหายไปหรือสิ่งที่สับสน
StingyJack

9

แตกต่างจากการจำลองเสมือนการสร้างคอนเทนเนอร์ใช้โฮสต์ระบบปฏิบัติการเดียวกัน ดังนั้นคอนเทนเนอร์ที่สร้างขึ้นบน linux จึงไม่สามารถทำงานบน windows และในทางกลับกันได้

ใน windows คุณต้องใช้ virtuallization (โดยใช้ Hyper-v) เพื่อให้ระบบปฏิบัติการเดียวกันกับระบบปฏิบัติการของตู้คอนเทนเนอร์ของคุณและจากนั้นคุณควรจะสามารถทำงานได้เหมือนกัน

Docker for windows เป็นแอพที่คล้ายกันซึ่งสร้างขึ้นบน Hyper-v และช่วยในการเรียกใช้คอนเทนเนอร์ linux docker บน windows แต่เท่าที่ฉันรู้ไม่มีอะไรที่ช่วยให้เรียกใช้ windows container บน linux


9

คอนเทนเนอร์ใช้เคอร์เนลระบบปฏิบัติการ Windows Container ใช้กระบวนการเพื่อให้ทำงานได้ ดังนั้น Windows Containers ที่พูดตามหลักเหตุผลไม่สามารถทำงานบน Linux ได้

อย่างไรก็ตามมีวิธีแก้ไขปัญหาโดยใช้โซลูชัน VMstyle

ฉันได้พบวิธีแก้ปัญหานี้ซึ่งใช้ Vagrant และ Packer บน Mac ดังนั้นจึงควรใช้งานกับ Linux ได้เช่นกัน: https://github.com/StefanScherer/windows-docker-machine

สภาพแวดล้อม Vagrant นี้สร้างเครื่องเชื่อมต่อเพื่อทำงานกับ MacBook ด้วยคอนเทนเนอร์ Windows คุณสามารถสลับระหว่างคอนเทนเนอร์ Docker สำหรับ Mac Linux และคอนเทนเนอร์ Windows ได้อย่างง่ายดาย

กำลังรันคำสั่ง bash ป้อนคำอธิบายรูปภาพที่นี่

สร้างกล่อง Vagrant ที่ไม่มีหัว

$ 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

สร้างเครื่องนักเทียบท่า

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

เปลี่ยนเป็นคอนเทนเนอร์ Windows

$ eval $(docker-machine env 2019)

7

โซลูชันที่ 1 - การใช้ VirtualBox

ในฐานะที่เป็นมูฮัมหมัด Sahputraข้อเสนอแนะในโพสต์นี้ก็เป็นไปได้ที่จะเรียกใช้ระบบปฏิบัติการ WindowsภายในVirtualBox (ใช้ VBoxHeadless - ไม่ติดต่อแบบกราฟิก) ภายในหางภาชนะ

นอกจากนี้การตั้งค่า NAT ภายในการกำหนดค่าเครือข่าย VM สามารถทำการส่งต่อพอร์ตซึ่งช่วยให้คุณสามารถส่งผ่านทราฟฟิกใด ๆ ที่มาถึงและจากคอนเทนเนอร์นักเทียบท่า ในที่สุดสิ่งนี้ช่วยให้คุณสามารถเรียกใช้บริการที่ใช้ Windows ใด ๆ บนเครื่อง Linux

บางทีนี่อาจไม่ใช่กรณีทั่วไปของคอนเทนเนอร์ Docker แต่เป็นวิธีที่น่าสนใจสำหรับปัญหานี้


โซลูชันที่ 2 - การใช้ไวน์

สำหรับแอปพลิเคชั่นที่เรียบง่ายและอาจซับซ้อนกว่านี้คุณสามารถลองใช้ไวน์ในตู้เก็บของได้

หน้าศูนย์กลางนักเทียบท่านี้อาจช่วยให้คุณบรรลุเป้าหมาย


ฉันหวังว่านักเทียบท่าจะเปิดตัวโซลูชั่นแบบเนทีฟในไม่ช้าเหมือนที่พวกเขาทำกับเครื่องเทียบท่าบน Windows เมื่อหลายปีก่อน


6

คุณสามารถใช้ Windows Containers ภายในเครื่องเสมือน (ระบบปฏิบัติการ guest ควรตรงกับข้อกำหนด - Windows 10 Pro หรือ Windows 2016)

ตัวอย่างเช่นคุณสามารถใช้ VirtualBoxเพียงเปิดใช้งาน Hyper-V ภายในระบบ / การเร่งความเร็ว / อินเตอร์เฟส Parav virtualization

หลังจากนั้นหาก Docker ไม่เริ่มทำงานเนื่องจากข้อผิดพลาดให้ใช้ "เปลี่ยนเป็นคอนเทนเนอร์ Windows ... " ในการตั้งค่า

(นี่อาจเป็นความคิดเห็นต่อคำตอบที่ยอมรับ แต่ฉันไม่มีชื่อเสียงพอที่จะทำเช่นนั้น)


3

ในขณะที่นักเทียบท่าสำหรับ Windows สามารถเรียกใช้คอนเทนเนอร์ Linux ได้อย่างสมบูรณ์ แต่การสนทนาในขณะที่เป็นไปได้ในทางทฤษฎีก็ไม่ได้ถูกนำมาใช้เนื่องจากเหตุผลในทางปฏิบัติ

สิ่งที่ชัดเจนที่สุดคือในขณะที่ Docker สำหรับ Windows สามารถเรียกใช้ Linux VM ได้อย่างอิสระ แต่ Docker สำหรับ Linux จะต้องมีใบอนุญาตของ Windows เพื่อใช้งานภายใน VM

นอกจากนี้ Linux ยังสามารถปรับแต่งได้อย่างสมบูรณ์ดังนั้น Linux VM ที่ใช้โดย Docker สำหรับ Windows ได้ถูกตัดลงเหลือเพียงไม่กี่ MB ซึ่งมีเพียงขั้นต่ำเปล่าเท่านั้นที่จำเป็นในการใช้งานคอนเทนเนอร์ มันอาจจะไม่ได้ขนาดที่ทำไม่ได้ แต่มันยุ่งยากกว่า Linux บน Windows มาก

ในขณะที่บางคนขาย Docker for Linux รุ่นที่มีใบอนุญาต Windows และพร้อมที่จะใช้งาน Windows container ภายใต้ Linux (และฉันไม่ทราบว่ามีผลิตภัณฑ์ดังกล่าวอยู่หรือไม่) บรรทัดล่างคือคุณไม่สามารถหลีกเลี่ยงได้ จ่ายราคาล็อคอินของผู้ขาย Windows: ทั้งในด้านเงินและพื้นที่เก็บข้อมูล


0

คุณสามารถเรียกใช้ MSSQL และ. NET Core บน Linux และภายในคอนเทนเนอร์ Linux ในปัจจุบัน

ดู: https://hub.docker.com/r/microsoft/mssql-server-linux/

นอกจากนี้: https://hub.docker.com/r/microsoft/dotnet/

แน่นอนว่าคำถามที่ตรงกับคำตอบของคุณนั้นแน่นอนเว้นแต่จะมีรุ่นที่คอมไพล์โดยเฉพาะสำหรับ Linux ไม่ใช่


3
นี่เป็นเรื่องจริง - แต่มันไม่มีส่วนเกี่ยวข้องกับคำถาม Plus MS-SQL เป็นมากกว่าแค่เอ็นจิ้น (ซึ่งบน Linux มาโดยไม่มี filestream หรือ R โดยวิธี - ดังนั้นมันไม่ได้เป็นทั้งเครื่องยนต์)
Stefan Steiger

คุณต้องคิดล่วงหน้าหนึ่งก้าว ... ทำไมเขาถึงถาม? หากเขาถามเพราะเขาต้องการเรียกใช้อย่างใดอย่างหนึ่งเหล่านี้: voila
ร่าง

2
เป็นไปได้ แต่ IMHO เขาอาจถามคำถามเพราะเขาทำไปแล้วและตอนนี้เขาต้องทำงานหลายอย่างเช่น SSRS / SSAS หรือการควบคุมแบบฟอร์มบนเว็บเช่น ReportViewer บน Linux
Stefan Steiger

ภาพ Docker microsoft / dotnet ใช้สำหรับ. Net Core ซึ่งเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงจาก. Net เก่า 4.x ดังนั้นคุณจึงไม่สามารถเรียกใช้แอพที่ออกแบบมาสำหรับ. Net เก่าบน. Net Core ได้
j123b567

3
พวกเขาสนับสนุน.NET Coreและไม่ .NET - เหล่านี้เป็นสองสภาพแวดล้อมที่แตกต่างกันโดยสิ้นเชิง
Slavik Meltser

-1

คอนเทนเนอร์ Windows ไม่ทำงานบน Linux และคุณไม่สามารถเรียกใช้คอนเทนเนอร์ Linux บน Windows ได้โดยตรง


6
คุณอธิบายรายละเอียดเล็กน้อยได้ไหม?
Matthieu

18
คุณสามารถใช้งาน linux container บน win 10
Kugel

2
ฉันโหวตผู้ชายคนนี้ขึ้นเพราะฉันคิดว่ามันเป็นเรื่องจริงในเวลา อย่างไรก็ตามตอนนี้คุณสามารถรันคอนเทนเนอร์ Linux ใน Docker บน Windows ได้ (Docker ทำงานใน VM ชื่อ MobyLinux)
JakeJ

โดยทั่วไป windows จะเรียกใช้ Linux VM ขนาดเล็กเพื่อเรียกใช้คอนเทนเนอร์ Linux ตรวจสอบแหล่งข้อมูลไฮเปอร์ - วีของคุณเพื่อดู
Tuğrul Karakaya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.