2015-09-29 18 views
13

Làm thế nào để trình docker chạy trên máy chủ Debian có thể là một OpenSUSE trong một thùng chứa? Nó sử dụng hạt nhân khác nhau, với các mô-đun riêng biệt. Các phiên bản Debian cũ hơn đã sử dụng các hạt nhân cũ hơn, vậy làm thế nào để chạy nó trên phiên bản hạt nhân 3.10+? Những hạt nhân cũ hơn chỉ có các chức năng được xây dựng cũ hơn, làm cách nào một bản phân phối cũ có thể quản lý các tính năng mới? "Bí quyết" trong đó là gì?Docker có thể chạy distro với các hạt nhân khác nhau như thế nào?

Trả lời

17

Làm thế nào có thể Docker chạy trên một máy chủ Debian có lẽ một OpenSUSE trong một container

Vì hạt nhân là như nhau và sẽ hỗ trợ động cơ Docker để chạy tất cả những hình ảnh container: kernel máy chủ nên 3,10 trở lên, nhưng list of system calls của nó là khá ổn định.

Xem "Architecting Containers: Why Understanding User Space vs. Kernel Space Matters":

  1. Ứng dụng chứa logic kinh doanh, nhưng dựa trên các cuộc gọi hệ thống.
  2. Khi ứng dụng được biên soạn, tập hợp các cuộc gọi hệ thống mà ứng dụng sử dụng (tức là dựa vào) được nhúng vào nhị phân (ở các ngôn ngữ cấp cao hơn, đây là thông dịch viên hoặc JVM).
  3. Vùng chứa không trừu tượng sự cần thiết cho không gian người dùng và không gian hạt nhân để chia sẻ một tập hợp các cuộc gọi hệ thống phổ biến.
  4. Trong một thế giới được chứa, không gian người dùng này được nhóm lại và chuyển đến các máy chủ khác nhau, từ máy tính xách tay đến máy chủ sản xuất.
  5. Trong những năm tới, điều này sẽ tạo ra những thách thức.

https://rhelblog.files.wordpress.com/2015/07/user-space-vs-kernel-space-simple-container.png?w=584&h=231

Có những lúc cuộc gọi hệ thống mới được thêm vào, và các cuộc gọi hệ thống cũ đang bị phản đối; điều này cần được cân nhắc khi suy nghĩ về vòng đời của cơ sở hạ tầng vùng chứa của bạn và các ứng dụng sẽ chạy bên trong nó.

Xem thêm "Why kernel version doesn't match Ubuntu version in a Docker container?":

Không có hạt nhân bên trong một container. Ngay cả khi bạn cài đặt hạt nhân, nó sẽ không được tải khi vùng chứa bắt đầu. Mục đích của một container là cô lập các tiến trình mà không cần phải chạy một hạt nhân mới.

+0

Tôi nghĩ rằng ở trên không trả lời đầy đủ câu hỏi. Trong khi tôi hoàn toàn đồng ý rằng các liên kết tham chiếu cung cấp giải thích lý do tại sao các thùng chứa không sinh ra hạt nhân riêng của chúng ta, chúng ta có thể thực sự muốn sinh ra một thùng chứa có thể dựa vào một phiên bản hạt nhân cụ thể. Tôi nghĩ rằng docker ngay cả khi chạy trên một máy chủ Linux có thể có một chế độ mà bạn có thể chọn phiên bản hạt nhân. – user725408

Các vấn đề liên quan