Tôi tự hỏi tại sao, ngoài chroot cũ, không có triển khai ảo hóa cấp hệ điều hành (hoặc container nếu bạn thích) tồn tại cho Mac OS X.
Nó có thể là do giới hạn kernel hoặc hạn chế giấy phép? Hoặc đơn giản là chưa có ai đưa ra một dự án tương tự?
Tôi tự hỏi tại sao, ngoài chroot cũ, không có triển khai ảo hóa cấp hệ điều hành (hoặc container nếu bạn thích) tồn tại cho Mac OS X.
Nó có thể là do giới hạn kernel hoặc hạn chế giấy phép? Hoặc đơn giản là chưa có ai đưa ra một dự án tương tự?
Câu trả lời:
Một yếu tố quan trọng cần thiết cho việc container hóa là sự cô lập của mạng và các dịch vụ khác, nhưng không chỉ là sự cô lập mà còn là sự ảo hóa . FreeBSD Jails, Linux "container" (hay chính xác hơn là "không gian tên") và các vùng Solaris / illumos đều cung cấp một mức độ "ảo hóa" các dịch vụ hệ thống hệ điều hành này.
Bằng cách ảo hóa, điều này có nghĩa là các máy chủ này có sẵn (hoặc có khả năng khả dụng ) cho những thứ bên trong "container", nhưng theo cách bảo vệ những thứ khác trên cùng một máy chủ bên ngoài container. (Ví dụ: một container có thể có ngăn xếp TCP / IP riêng, với địa chỉ IP riêng, bộ đệm ARP, v.v.)
Ảo hóa hệ điều hành (hệ điều hành) là cách chúng ta thường đề cập đến loại ảo hóa "trọng lượng nhẹ" này, trong đó các quá trình nghĩ rằng chúng nhìn thấy một hạt nhân ảo, nhưng tất cả đều chia sẻ cùng một hạt nhân thực sự dưới mui xe; hạt nhân đó hoạt động như một loại trình ảo hóa trong việc đảm bảo rằng các ranh giới vùng chứa / ảo hóa không bị vượt qua. (Nói cách khác, các dịch vụ HĐH được ảo hóa.) So sánh điều này với ảo hóa phần cứng, trong đó phần ảo hóa là phần cứng - ví dụ như các thiết bị được mô phỏng trong phần mềm và được trình bày cho một hệ điều hành chạy trong container. Điều này rất mạnh, nhưng khá tốn tài nguyên - mỗi máy ảo phải có bản sao riêng của hệ điều hành.
MacOS gần đây có hỗ trợ hypanneror riêng thông qua Hypervisor.framework cho phép phần mềm như "XHyve" [Cổng của FreeBSD's BHyve] (docker trên macOS sử dụng điều này), nhưng thiếu các dịch vụ cần thiết trong hệ thống để ảo hóa hoàn toàn các dịch vụ hệ điều hành.
Trong thực tế, rất nhiều thứ cần thiết có lẽ đã có sẵn, vì công việc cung cấp hộp cát có nghĩa là đã có những điểm logic trong đó các cuộc gọi hệ thống bị chặn và xử lý khác nhau cho các ứng dụng khác nhau. Tuy nhiên, đó là xa câu chuyện hoàn chỉnh - thực hiện mạng riêng biệt thực sự, IPC và các không gian tên khác là khá nhiều công việc.
Lý do tốt nhất cho lý do tại sao Apple không làm điều này có thể là lý do tương tự vì Apple đã không phát hành một nền tảng phù hợp để chạy macOS trong trung tâm dữ liệu trong nhiều năm - thiếu nhu cầu thị trường, hoặc nhận thấy thiếu nhu cầu thị trường của lãnh đạo Apple. Trọng tâm máy tính để bàn và thiết bị di động nơi họ tập trung sự chú ý của họ chỉ đơn giản là không cần các phiên bản macOS ảo nhiều như vậy. (Điều này thật đáng buồn, vì tôi rất thích có hỗ trợ macOS ảo - ví dụ: chạy macOS trên máy ảo tại Travis CI thực sự tốn thời gian so với các container Linux).
Bạn sẽ ngạc nhiên - Các container thực sự được hỗ trợ - Sandbox OS X (và iOS) đã phát triển để sử dụng chúng. Chúng đã được giới thiệu vào 10.7 và hiện đang là tiêu chuẩn thực tế trong 10.10 và iOS 8. Sau đó, chúng được thực thi nghiêm ngặt hơn (chủ yếu là vì lý do bảo mật ứng dụng), đến mức mà một ứng dụng chỉ có thể nhìn thấy và trước đó các phương thức liệt kê các quy trình hoặc tài nguyên hiện trả về kết quả dựa trên vùng chứa - tương tự như không gian tên ipc của Linux - nhưng mạnh hơn.
Tôi sẽ tưởng tượng câu trả lời là không ai thực sự muốn nó. Nó dường như có thể làm được. Những điều này được thực hiện chủ yếu cho một mục đích, bảo tồn hiệu suất cho các nhà cung cấp VPS. Và thực sự không ai muốn một ví dụ VPS dựa trên OS X.
Trong khi nó sử dụng "chroot cũ tốt (8)", tôi đã bắt đầu một dự án có xu hướng bắt chước hành vi của docker trên OS X và NetBSD. Đó là bài phát biểu miễn phí và có sẵn trên GitHub . Như README nói, dự án này không liên quan đến bảo mật cũng như sản xuất, nhưng sẽ giúp kiểm tra toàn bộ ngăn xếp nguyên bản trên máy trạm của bạn.