Windows Container có thể được lưu trữ trên linux không?


238

Có thể chạy Windows Container trên Linux không? Kịch bản dựa trên một ứng dụng được viết bằng .NET (mạng cũ) và người dùng Linux muốn chạy nó với Docker để cung cấp net462API bằng văn bản trên localhost.

Tôi đang sử dụng phiên bản beta từ Docker Desktop cho Windows

Nếu không, tại sao Windows có thể chạy các container Linux mà không phải ngược lại?

BIÊN TẬP:

Khi một thời gian đã trôi qua và câu hỏi này là một câu hỏi phổ biến. Tôi muốn thêm một lưu ý ở đây là cách giải quyết là sử dụng tiêu chuẩn mạng mới. Nó cho phép tôi đóng gói 4.6.2khung vào thư viện mới.


4
Không thể - Để xây dựng và chạy các bộ chứa Windows, cần có một hệ thống Windows có hỗ trợ bộ chứa.
ajtrichards

5
Ok, nhưng tại sao Windows có thể chạy các thùng chứa linux? Không có ngược lại cho bây giờ?
Sebastian 506563

10
@ Sebastian506563 vì docker chạy ảo hóa VirtualBox đằng sau hậu trường để làm cho các container Linux chạy trên Windows. Tôi đoán theo lý thuyết cũng có thể theo cách khác, chỉ là docker đã không thực hiện nó.
Gregory Suvalian

5
Với máy ảo, mỗi vm có hệ điều hành riêng. Với các thùng chứa, có hình ảnh hệ điều hành cơ sở và mỗi thùng chứa được thêm một lớp mỏng mới trên đầu đế. Trong docker hệ điều hành cơ sở linux dựa trên linux này. tức là bộ chứa windows của bạn không thể sử dụng cơ sở vì nó khác. blog.risingstack.com/ từ
xen-dara

3
@PanagiotisKanavos vui lòng soạn câu trả lời
Sebastian 506563

Câu trả lời:


162

Update3: 06.2019 Một số ý kiến ​​nói rằng câu trả lời không rõ ràng, tôi sẽ cố gắng làm rõ.

TL; DR:

Hỏi: Các container Windows có thể chạy trên Linux không?

A: Không. Họ không thể. Các bộ chứa đang sử dụng các trình điều khiển và tài nguyên của Hệ điều hành bên dưới, vì vậy các bộ chứa Windows chỉ có thể chạy trên Windows và các bộ chứa Linux chỉ có thể chạy trên Linux.

Q: Nhưng còn Docker cho Windows thì sao? Hoặc các giải pháp dựa trên VM khác?

Trả lời: Docker cho Windows cho phép bạn mô phỏng các bộ chứa Linux đang chạy trên Windows , nhưng dưới vỏ bọc , máy ảo Linux được tạo, do đó, các bộ chứa Linux vẫn chạy trên Linux và các bộ chứa Windows đang chạy trên Windows .

Phần thưởng: Đọc bài viết rất hay này về việc chạy các container Linux docker trên Windows.

H: Vậy, tôi nên làm gì với ứng dụng .Net Framework 462, nếu tôi muốn chạy trong một container?

A: Nó phụ thuộc. Sau một số khuyến nghị:

  • Nếu có thể - di chuyển đến .Net Core. Do .Net Core mang đến sự hỗ trợ cho hầu hết các tính năng chính của .Net Framework và .Net Framework 4.8 sẽ là phiên bản cuối cùng của .Net framework
  • Nếu bạn không thể di chuyển sang .Net Core - Như @Sebastian đã đề cập - bạn có thể chuyển đổi thư viện của mình sang .Net Standard và có 2 phiên bản ứng dụng - một trên .Net Framework 4.6.2 và một trên .Net Core - không phải luôn luôn rõ ràng, Visual Studio hỗ trợ nó khá tốt (với đa mục tiêu), nhưng một số phụ thuộc có thể cần được chăm sóc thêm.

  • (Ít khuyến nghị hơn) Trong một số trường hợp, bạn có thể chạy các thùng chứa windows. Các bộ chứa Windows đang ngày càng hoàn thiện hơn, với sự hỗ trợ tốt hơn trong các nền tảng như Kubernetes. Nhưng để có thể chạy mã .Net Framework, bạn vẫn cần chạy trên hình ảnh cơ sở của "Server Core", chiếm khoảng 1,4 GB. Trong các trường hợp hiếm gặp tương tự, bạn có thể di chuyển mã của mình sang .Net Core, nhưng vẫn chạy trên các máy chủ Windows Nano, với kích thước hình ảnh là 95 MB.

Để lại những cập nhật cũ cho lịch sử

Update2: 08,2018 Nếu bạn đang sử dụng Docker-cho-Windows, bạn có thể chạy ngay bây giờ cả hai cửa sổ và container Linux đồng thời : https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows- và-linux-container-đồng thời /

Phần thưởng: Không liên quan trực tiếp đến câu hỏi, nhưng giờ đây bạn có thể chạy không chỉ chính bộ chứa linux mà còn cả người điều phối như kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-av Available-in -docker-desktop-ổn định-kênh /

Cập nhật vào năm 2018:

Câu trả lời ban đầu nói chung là đúng, NHƯNG vài tháng trước, docker đã thêm tính năng thử nghiệm LCOW ( kho github chính thức ).

Từ bài này :

Không Docker cho Windows đã chạy các container Linux? Đúng rồi. Docker cho Windows có thể chạy các thùng chứa Linux hoặc Windows, với sự hỗ trợ cho các thùng chứa Linux thông qua Hyper-V Moby Linux VM (kể từ Docker cho Windows 17.10, VM này dựa trên LinuxKit).

Thiết lập để chạy các thùng chứa Linux với LCOW đơn giản hơn nhiều so với kiến ​​trúc trước đây nơi Hyper-V Linux VM chạy trình nền Linux Docker, cùng với tất cả các thùng chứa của bạn. Với LCOW, trình nền Docker chạy như một quy trình Windows (giống như khi chạy Docker Windows container) và mỗi khi bạn khởi động Linux container Docker sẽ khởi chạy một trình ảo hóa Hyper-V tối thiểu chạy VM với nhân Linux, runc và các tiến trình chứa chạy trên đỉnh.

Bởi vì chỉ có một trình nền Docker và vì trình nền đó hiện đang chạy trên Windows, nên tôi sẽ sớm có thể chạy các bộ chứa Docker của Windows và Linux, trong cùng một không gian tên mạng . Điều này sẽ mở khóa rất nhiều tình huống phát triển và sản xuất thú vị cho người dùng Docker trên Windows.

Nguyên:

Như đã đề cập trong các bình luận của @PanagiotisKanavos, các container không dành cho ảo hóa và chúng đang sử dụng tài nguyên của máy chủ . Kết quả là, bây giờ windows container không thể chạy "nguyên trạng" trên máy linux.

Nhưng - bạn có thể làm điều đó bằng cách sử dụng VM - vì nó hoạt động trên windows. Bạn có thể cài đặt Windows VM trên máy chủ linux, điều này sẽ cho phép chạy các thùng chứa windows.

Với nó, IMHO chạy nó theo cách này trên môi trường SẢN XUẤT sẽ không phải là ý tưởng tốt nhất.

Ngoài ra, câu trả lời này cung cấp thêm chi tiết.


12
Câu trả lời được liên kết không thực sự cung cấp bất kỳ chi tiết nào về vấn đề này - nó chỉ giải thích cách chạy các thùng chứa Linux trên Windows (nghịch đảo). Có thể chạy Docker bên trong Windows VM, nhưng bạn cần hỗ trợ ảo hóa lồng nhau cho việc này. Điều này có nghĩa là nó hoạt động với VMware, nhưng không phải Virtualbox.
Ralf

3
Rất nhiều từ trong câu trả lời nhưng dường như không trả lời được câu hỏi.
Kyberias

2
Nó không trả lời cho câu hỏi. Nó không nên được xếp hạng cao như vậy
Vô định hình

2
Đây KHÔNG phải là một câu trả lời cho câu hỏi này. Chạy docker trên Linux khác với việc chạy docker trên Windows. Tại sao điều này được đánh dấu là một câu trả lời? \
Ani

Container = chạy các ứng dụng khác biệt hiệu quả (được xây dựng cho một hệ điều hành cụ thể), ít bộ nhớ, dung lượng ổ đĩa, chi phí hoạt động, sử dụng phần cứng hiệu quả hơn VM = trường hợp sử dụng .. sử dụng toàn bộ hệ điều hành cho các trường hợp sử dụng khác nhau ..., sử dụng phần cứng rất tốt (Tôi không cần mua máy diff cho mỗi HĐH..nếu tôi thực sự cần nhiều HĐH cho trường hợp sử dụng của mình), nhưng việc sử dụng khó khăn không lớn so với các container. Video tuyệt vời của CTO của Joyent: youtube.com/watch?v=coFIEH3vXPw
cacoder

16

Không, bạn không thể chạy các thùng chứa windows trực tiếp trên Linux.

Nhưng bạn có thể chạy Linux trên Windows.

Windows Server / 10 được đóng gói với hình ảnh cơ sở của hệ điều hành Ubuntu ( sau gói dịch vụ beta tháng 9 năm 2016 ). Đó là lý do bạn có thể chạy linux trên windows chứ không phải khôn ngoan khác. Kiểm tra ở đây. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/

Bạn có thể thay đổi giữa các bộ chứa hệ điều hành Linux và windows bằng cách nhấp chuột phải vào docker trong menu khay.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


13
OP đang tìm cách chạy các thùng chứa Windows trên các máy chủ Linux, vì vậy cái này không trả lời câu hỏi. Nhưng tôi không thích những người đưa ra downvote mà không có bình luận, vì vậy tôi đang đưa ra một upvote
daisy

1
@Karthikeyan V: Bởi vì đó không phải là câu trả lời cho câu hỏi.
Stefan Steiger

Tôi không chắc những gì nó nói trước đây nhưng câu nói đầu tiên nói rằng bạn không thể và câu thứ hai nói rằng bạn có thể. Nó có lẽ là một thiếu hoặc một cái gì đó là khó hiểu.
StingyJack

9

Không giống như Ảo hóa, container hóa sử dụng cùng một máy chủ os. Vì vậy, container được xây dựng trên linux không thể chạy trên windows và ngược lại.

Trong các cửa sổ, bạn phải có sự trợ giúp của việc thành thạo (sử dụng Hyper-v) để có cùng hệ điều hành với hệ điều hành của container và sau đó bạn sẽ có thể chạy tương tự.

Docker cho windows là ứng dụng tương tự được xây dựng trên Hyper-v và giúp chạy bộ chứa docker linux trên windows. Nhưng theo như tôi biết, không có gì giúp chạy các container Windows trên linux.


9

Các container sử dụng kernel OS. Windows Container sử dụng các quy trình để chạy. Vì vậy, về mặt lý thuyết, Windows Container không thể chạy trên Linux.

Tuy nhiên, có những cách giải quyết sử dụng các giải pháp VMstyle.

Tôi đã tìm thấy giải pháp này sử dụng Vagrant và Packer trên Mac, vì vậy nó cũng hoạt động với Linux: https://github.com/StefanScherer/windows-docker-machine

Môi trường Vagrant này tạo ra một Docker Machine để hoạt động trên MacBook của bạn với các thùng chứa Windows. Bạn có thể dễ dàng chuyển đổi giữa Docker cho Mac Linux container và Windows container.

Chạy các lệnh bash nhập mô tả hình ảnh ở đây

xây dựng hộp Vagrant không đầu

$ 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

Tạo máy Docker

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

Chuyển sang bộ chứa Windows

$ eval $(docker-machine env 2019)

7

Giải pháp 1 - Sử dụng VirtualBox

Như Muhammad Sahputra đã đề xuất trong bài đăng này , có thể chạy HĐH Windows bên trong VirtualBox (sử dụng VBoxHeadless - không có giao diện đồ họa) bên trong thùng chứa Docker .

Ngoài ra, một thiết lập NAT bên trong các cấu hình mạng VM có thể thực hiện chuyển tiếp cổng cung cấp cho bạn khả năng chuyển qua bất kỳ lưu lượng truy cập nào đến và từ bộ chứa Docker. Điều này cuối cùng, trong một viễn cảnh rộng lớn, cho phép bạn chạy bất kỳ dịch vụ dựa trên Windows nào trên máy Linux.

Có thể đây không phải là trường hợp sử dụng điển hình của container Docker, nhưng nó chắc chắn là một cách tiếp cận thú vị cho vấn đề.


Giải pháp 2 - Sử dụng rượu vang

Đối với các ứng dụng đơn giản và có thể phức tạp hơn, bạn có thể thử sử dụng rượu bên trong thùng chứa docker .

Trang trung tâm docker này có thể giúp bạn đạt được mục tiêu của mình.


Tôi hy vọng rằng Docker sẽ sớm phát hành một giải pháp gốc, giống như họ đã làm với docker-machine trên Windows vài năm trước.


6

Bạn có thể sử dụng Windows Container bên trong một máy ảo (HĐH khách phải phù hợp với yêu cầu - Windows 10 Pro hoặc Windows 2016).

Ví dụ: bạn có thể sử dụng VirtualBox , chỉ cần bật Hyper-V bên trong Giao diện hệ thống / Tăng tốc / Paravirtualization.

Sau đó, nếu Docker không khởi động do lỗi, hãy sử dụng "Chuyển sang bộ chứa Windows ..." trong cài đặt.

(điều này có thể được chuyển như một nhận xét cho câu trả lời được chấp nhận, nhưng tôi không có đủ danh tiếng để làm như vậy)


3

Mặc dù Docker cho Windows hoàn toàn có thể chạy các thùng chứa Linux, nhưng điều ngược lại, về mặt lý thuyết là có thể, không được thực hiện vì lý do thực tế.

Điều rõ ràng nhất là, trong khi Docker cho Windows có thể chạy Linux VM một cách tự do, Docker cho Linux sẽ yêu cầu giấy phép Windows để chạy nó trong VM.

Ngoài ra, Linux hoàn toàn có thể tùy chỉnh, do đó, máy ảo Linux được Docker cho Windows sử dụng đã bị rút xuống chỉ còn vài MB, chỉ chứa tối thiểu mức cần thiết để chạy các thùng chứa, trong khi bản phân phối Windows nhỏ nhất có sẵn là khoảng 1,5 GB. Nó có thể không phải là một kích thước không thể thực hiện được, nhưng nó cồng kềnh hơn nhiều so với Linux trên bản sao Windows.

Mặc dù chắc chắn ai đó có thể bán biến thể Docker cho Linux đi kèm với giấy phép Windows và sẵn sàng chạy các thùng chứa Windows trong Linux (và tôi không biết sản phẩm đó có tồn tại không), điểm mấu chốt là bạn không thể tránh trả giá khóa nhà cung cấp Windows: cả về tiền và dung lượng lưu trữ.


0

Ngày nay, bạn có thể chạy MSSQL và .NET Core trên Linux và do đó bên trong các thùng chứa Linux.

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

Ngoài ra: https://hub.docker.com/r/microsoft/dotnet/

Câu hỏi trực tiếp cho câu trả lời của bạn, tất nhiên, trừ khi có một phiên bản được biên dịch đặc biệt dành cho Linux, không.


3
Điều này là đúng - nhưng nó không liên quan gì đến câu hỏi. Plus MS-SQL không chỉ là công cụ (mà trên Linux không có filestream hay R bằng cách này - vì vậy nó thậm chí không phải là toàn bộ công cụ).
Stefan Steiger

Bạn phải suy nghĩ một bước về phía trước ... tại sao anh ta hỏi? Nếu anh ta hỏi vì anh ta muốn chạy một trong những thứ này: thì đấy.
dagelf

2
Khả thi. Nhưng IMHO, có lẽ anh ta đặt câu hỏi vì anh ta đã làm điều đó, và giờ anh ta phải chạy những thứ như SSRS / SSAS hoặc một số điều khiển dạng web, như ReportViewer, trên Linux.
Stefan Steiger

Docker hình ảnh microsoft / dotnet là dành cho .Net Core, một cái gì đó hoàn toàn khác với .Net 4.x cũ, vì vậy bạn không thể chạy ứng dụng được thiết kế cho .Net trên .Net Core
j123b567

3
Họ đang hỗ trợ .NET CoreKHÔNG .NET - đây là hai môi trường hoàn toàn khác nhau.
Slasta Meltser

-1

Các thùng chứa Windows không chạy trên Linux và bạn cũng không thể chạy các thùng chứa Linux trên Windows trực tiếp.


6
Bạn có thể xây dựng một chút?
Matthieu

18
Bạn có thể chạy các thùng chứa linux trên win 10
Kugel

2
Tôi đã bình chọn anh chàng này, vì tôi nghĩ đó là sự thật vào thời điểm đó. Tuy nhiên, bây giờ bạn có thể chạy các thùng chứa Linux trong Docker trên Windows (Docker chạy trong máy ảo có tên MobyLinux).
JakeJ

Cửa sổ thông thường chạy một máy ảo Linux nhỏ để chạy các thùng chứa Linux. kiểm tra tài nguyên siêu v của bạn để xem nó
Tuğrul Karakaya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.