Docker container có kernel riêng của họ hay không?


65

Tôi thấy rằng rất nhiều hình ảnh docker trong kho docker được tạo bằng cơ sở Ubuntu.

Điều đó nghĩa là gì? Có phải mỗi container chứa một phiên bản rút gọn của nhân Linux?

Các container ngồi trên hạt nhân của họ? Nhưng tôi nghĩ rằng các container chia sẻ kernel của máy chủ (trong một số trường hợp là boot2docker, một bản dựng Tiny Core Linux tùy chỉnh và trong những cái khác giống như CoreOS).

EDIT: Làm rõ câu hỏi một chút. Có, tôi biết docker là một thùng chứa quá trình, không phải là một VM đầy đủ. Nhưng vì có các container "Ubuntu" trong sổ đăng ký trung tâm docker chính thức và các HĐH khác như CentOS, nên chạy Ubuntu trong một container có nghĩa là gì?

Trả lời: Ahh nó vừa mới nhận ra tôi. Đó là các quy trình đất của người dùng Ubuntu, chứa apt-get và các quy trình cấu hình khác cho một bản dựng Ubuntu cụ thể. Tương tự như vậy đối với CentOS. Docker không phải là quá trình đơn lẻ, chỉ là mục đơn. Vì vậy, đối với các bản phân phối này, điểm vào là một loại quy trình init sinh ra các quy trình khác.


2
"Đó là quy trình đất của người dùng Ubuntu," - không chỉ các quy trình, mà cả các thư viện.
osgx 14/03/2015

Câu trả lời:


37

Docker sử dụng kernel hệ điều hành máy chủ, không có kernel tùy chỉnh hoặc bổ sung bên trong container. Tất cả các container chạy trên máy đều dùng chung kernel "host" này.

Wikipedia nói http://en.wikipedia.org/wiki/Docker_(software) rằng

Docker sử dụng các tính năng cách ly tài nguyên của nhân Linux, chẳng hạn như các nhóm và không gian tên kernel để cho phép các "container" độc lập chạy trong một phiên bản Linux duy nhất, tránh chi phí khởi động các máy ảo.

các nhóm, không gian tên và LXC là các tính năng của nhân Linux để cô lập các nhóm quy trình; vẫn còn một kernel, bộ lập lịch đơn và một thể hiện của trình quản lý bộ nhớ kernel.

Boot2docker và CoreOS chỉ là các bản phân phối Linux nhẹ với một số kernel host; chúng có thể được sử dụng để tải container Docker.

http://boot2docker.io/

boot2docker là một bản phân phối Linux nhẹ dựa trên Tiny Core Linux được tạo riêng để chạy các container Docker. Nó chạy hoàn toàn từ RAM, nặng ~ 27MB và khởi động trong ~ 5s (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Một máy chủ điều khiển duy nhất (ví dụ CoreOS) chạy nhiều hệ thống Linux (bộ chứa) bị cô lập, sử dụng Docker như một lớp trừu tượng và giao diện bổ sung [14] cho các tính năng ảo hóa cấp hệ điều hành cơ bản của hạt nhân Linux. ... Cách tiếp cận này dựa trên chức năng cgroups của hạt nhân Linux, cung cấp khả năng cách ly không gian tên và khả năng giới hạn, tài khoản và cách ly việc sử dụng tài nguyên (CPU, bộ nhớ, I / O đĩa, v.v.) cho các bộ sưu tập các quy trình.


1
Điều này không trả lời câu hỏi.
EML

2
EML, câu hỏi nào? Theo mặc định, tất cả các container Docker không có hạt nhân riêng. Chỉ có một kernel host cho tất cả các container Docker.
osgx

chắc chắn, câu trả lời của bạn là tốt trong như xa như nó đi, nhưng OP muốn biết lý do tại sao ông phải FROMmột hình ảnh cơ bản Ubuntu khi dẫn chương trình là đã chạy Ubuntu. Để trả lời câu hỏi, bạn phải giải thích một hình ảnh cơ bản là gì.
EML

1
EML, câu hỏi đã được chỉnh sửa bằng "Làm rõ" ( superuser.com/posts/889472/revutions ) sau khi câu trả lời của tôi đã được đăng, vì vậy đây là câu trả lời cho câu hỏi ban đầu mà không cần làm rõ. Nếu bạn có một số thông tin để chia sẻ về hình ảnh cơ bản và hạt nhân trong docker, hãy thêm một câu trả lời khác.
osgx

15

Trong hầu hết các trường hợp, nhân hệ điều hành máy chủ được chia sẻ. Để chạy một kernel khác, bạn cần sử dụng ảo hóa. Điều này là hiếm và chỉ được sử dụng khi cần thiết do suy giảm hiệu suất.

"Bộ chứa Docker Engine chỉ bao gồm ứng dụng và các phụ thuộc của nó. Nó chạy như một quy trình tách biệt trong không gian người dùng trên hệ điều hành máy chủ, chia sẻ kernel với các container khác. Vì vậy, nó thích các lợi ích phân tách và phân bổ tài nguyên của VM nhưng hơn thế nữa di động và hiệu quả. "

Điều này có thể giúp giải thích cách thức hoạt động của nó: nhập mô tả hình ảnh ở đây

Nguồn: https://www.docker.com/whatisdocker/


4
Bất kỳ nguồn nào cho "Gói có thể sử dụng các hạt nhân khác nhau" ??? Docker tự nó không thể sử dụng một số hạt nhân, luôn luôn chỉ có một hạt nhân máy chủ duy nhất. Chỉ khi kết hợp với hypanneror (ảo hóa), chúng ta mới có thể bắt đầu một số máy chủ với mỗi phiên bản kernel và chạy một Docker trên mỗi máy chủ ảo; nhưng đối với bất kỳ máy chủ nào sẽ chỉ có một hạt nhân cho máy chủ lưu trữ và cho các thùng chứa
Docked

2
Gói là gì? Docker container không có kernel bên trong nó; nó chỉ cần cài đặt và bắt đầu trên kernel được sử dụng trên máy chủ. Vì vậy: một Docker = một máy chủ = một kernel, giống như trong hình. Không có cách nào để sử dụng hai nhân với động cơ Docker đơn; tất cả các container bên trong công cụ này sẽ sử dụng cùng một kernel. Tôi nghĩ câu trả lời đúng là "Không, các container Docker không thể sử dụng các hạt nhân khác nhau trong một phiên bản duy nhất của Docker Engine"
osgx 14/03/2015

1
Mỗi bộ chứa docker có thể chạy bất kỳ mã nào nó muốn, bao gồm phần mềm ảo hóa có thể tải bất kỳ hạt nhân nào mà phần mềm của bạn có thể yêu cầu. Bạn có thể chạy Windows trong một thùng chứa nếu bạn muốn.
JeremiahBarrar

1
JeremiahBarrar, hiểu rồi, cảm ơn bạn đã giải thích. Việc chạy phần mềm ảo hóa từ bên trong container Docker có được ghi lại và nó có được Docker hỗ trợ không? Loại ảo hóa nào sẽ hoạt động từ Docker (phần mềm qemu, qemu + kvm, xen, ...)?
osgx 14/03/2015

2
Câu đầu tiên là sai lệch. Sử dụng VM bên trong một loại container đánh bại điểm sử dụng Docker.
user2707671
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.