Tại sao chúng ta sử dụng Hình ảnh cơ sở hệ điều hành với Docker nếu các thùng chứa không có Hệ điều hành khách?


83

Tôi mới bắt đầu học Docker và có điều gì đó khá khó hiểu đối với tôi. Như tôi đã đọc trên trang web của Docker, một container khác với một máy ảo. Theo tôi hiểu, một container chỉ là một hộp cát bên trong mà toàn bộ hệ thống tập tin bị cô lập đang chạy.

Tôi cũng đã đọc rằng một container không cài đặt HĐH khách. Thay vào đó, nó dựa vào Kernel OS bên dưới.

Tất cả điều đó là tốt. Điều tôi bối rối là có những hình ảnh Docker được đặt tên theo hệ điều hành. Chúng tôi thấy những hình ảnh như Ubuntu, Debian, Fedora, CentOS, v.v.

Quan điểm của tôi là: những hình ảnh đó là gì? Việc tạo một thùng chứa dựa trên hình ảnh Debian khác nhau như thế nào so với việc tạo Máy ảo và cài đặt Debian?

Tôi nghĩ rằng các container không có hệ điều hành khách được cài đặt, nhưng khi chúng tôi tạo hình ảnh, chúng tôi dựa trên một số hình ảnh được đặt tên theo một hệ điều hành.

Ngoài ra, trong các ví dụ tôi thấy khi chúng tôi làm docker run ubuntu echo "hello world", có vẻ như chúng tôi đang tạo ra một VM với Ubuntu và làm cho nó chạy lệnh echo "hello world".

Theo cùng một cách khi chúng ta làm docker run -it ubuntu /bin/bash, có vẻ như chúng ta đang tạo ra một VM với Ubuntu và truy cập nó bằng dòng lệnh.

Dù sao, những hình ảnh được đặt tên theo hệ điều hành là gì? Làm thế nào khác nhau để chạy một container với một trong những hình ảnh đó và quay VM với hệ điều hành khách tương ứng?

Ý tưởng là chúng ta chỉ chia sẻ kernel với HĐH máy chủ (và do đó chúng ta có quyền truy cập vào tài nguyên phần cứng máy bên dưới, không cần ảo hóa phần cứng), nhưng vẫn sử dụng các tệp và nhị phân của từng hệ thống khác nhau trên các container theo thứ tự để hỗ trợ bất cứ ứng dụng nào chúng ta muốn chạy?


2
Theo tôi, mục tiêu của bạn trong ảo hóa là chìa khóa. Nếu bạn cần thư viện, ngôn ngữ, v.v. trên HĐH, vì vậy các thùng chứa HĐH phù hợp với nhu cầu của bạn. Nhưng nếu nhu cầu của bạn chỉ là ứng dụng làm thành phần, thì không cần sử dụng HĐH làm hình ảnh cơ sở. Tôi nghĩ rằng bài viết này có thể giải thích rõ ràng blog.risingstack.com/...
metamorph

Câu trả lời:


68

Vì tất cả các bản phân phối Linux đều chạy cùng một nhân Linux (yup, nó được đơn giản hóa một chút) và chỉ khác nhau ở phần mềm người dùng, nên việc mô phỏng một môi trường phân phối khác là rất dễ dàng - chỉ bằng cách cài đặt phần mềm người dùng đó và giả vờ đó là một bản phân phối khác. Cụ thể, cài đặt bộ chứa CentOS bên trong Ubuntu OS sẽ có nghĩa là bạn sẽ có được vùng người dùng từ CentOS, trong khi vẫn chạy cùng một kernel, thậm chí không phải là một cá thể kernel khác.

Vì vậy, ảo hóa nhẹ giống như có các ngăn cách ly trong cùng một hệ điều hành. Au chống lại ảo hóa thực sự đang có một hệ điều hành chính thức khác bên trong hệ điều hành máy chủ. Đó là lý do tại sao docker không thể chạy FreeBSD hoặc Windows trong Linux.

Nếu điều đó sẽ dễ dàng hơn, bạn có thể nghĩ docker là loại môi trường chroot rất tinh vi và tiên tiến.


3
Vì vậy, đó là lý do tại sao tôi có thể lưu trữ mã golang đã biên dịch của mình trong bộ chứa Scratch trống - vì mã được biên dịch chỉ cần kernel?
Francis Norton

Vậy làm thế nào để HĐH khách biết sử dụng kernel của HĐH máy chủ (và làm thế nào để làm như vậy)? AFAIK, các cơ sở hình ảnh docker sử dụng hình ảnh hệ điều hành tiêu chuẩn. Trong ví dụ của bạn, không giống như có bản dựng CentOS tùy chỉnh biết sử dụng kernel của cha mẹ? Hoặc nó đơn giản như một thủ thuật hệ thống tệp (aufs) trong đó Docker chuyển hướng các lần đọc / khởi động của khách đến máy chủ (Ubuntu)? Trong trường hợp đó, khách (CentOS) sẽ cài đặt bản sao / boot riêng của mình, nhưng nó sẽ không bao giờ được đọc?
James S

Tôi thích lời giải thích của bạn nhưng làm thế nào để bạn giải thích việc chạy các container Linux trên Windows? Máy chủ 2016 và Windows 10 có chứa nhân Linux để cho phép sử dụng Docker không? Có phải đó là lý do tại sao những phiên bản đó là cần thiết?
duct_tape_coder

Điều này rất đơn giản: chúng chỉ chạy trong ngăn xếp ảo hóa đầy đủ của Hyper-V, bên trong một máy ảo Linux gốc: docs.microsoft.com/en-us/virtualization/windowscontainers/ trộm .
drookie

1

Các container chạy trên kernel đơn. Nói cách khác, tất cả các container đều có kernel đơn (Hệ điều hành máy chủ). Trong khi đó, các siêu giám sát khác có nhiều nhân. Mỗi máy ảo chạy trên kernel khác nhau.

Và "docker run ubfox" cũng giống như tạo môi trường chroot.

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.