Đề xuất này xuất phát từ mục tiêu và thiết kế của ảo hóa cấp hệ điều hành
Các thùng chứa đã được thiết kế để cô lập một quy trình cho người khác bằng cách cung cấp cho nó không gian người dùng và hệ thống tệp của riêng nó .
Đây là sự phát triển logic trong chroot
việc cung cấp một hệ thống tệp bị cô lập, bước tiếp theo là cách ly các tiến trình với các hệ thống khác để tránh ghi đè lên bộ nhớ và cho phép sử dụng cùng một tài nguyên (ví dụ cổng Ie TCP 8080) từ nhiều tiến trình mà không có xung đột.
Sự quan tâm chính trong một thùng chứa nó để đóng gói thư viện cần thiết cho quá trình mà không phải lo lắng về xung đột phiên bản. Nếu bạn chạy nhiều quy trình cần hai phiên bản của cùng một thư viện trong cùng một không gian người dùng và hệ thống tệp, bạn sẽ phải điều chỉnh ít nhất LDPATH cho mỗi quy trình để thư viện phù hợp được tìm thấy trước và một số thư viện không thể được điều chỉnh theo cách này, bởi vì đường dẫn của chúng được mã hóa cứng trong tệp thực thi tại thời điểm biên dịch, hãy xem câu hỏi SO này để biết thêm chi tiết.
Ở cấp độ mạng, bạn sẽ phải định cấu hình từng quy trình để tránh sử dụng cùng một cổng.
Chạy nhiều tiến trình trong cùng một vùng chứa yêu cầu một số điều chỉnh lớn và vào cuối ngày sẽ đánh bại mục đích cách ly, nếu bạn có thể chạy nhiều tiến trình trong cùng một không gian người dùng, chia sẻ cùng một tài nguyên tệp và mạng, thì tại sao không chạy chúng trên máy chủ?
Dưới đây là danh sách không đầy đủ về các điều chỉnh / cạm bẫy nặng nề mà tôi có thể nghĩ ra:
Xử lý nhật ký
Hoặc là với một khối lượng gắn kết hoặc xen kẽ trên thiết bị xuất chuẩn này mang lại một số quản lý. Nếu sử dụng một khối lượng được gắn kết, container của bạn sẽ có "địa điểm" riêng trên máy chủ hoặc hai container giống nhau sẽ chiến đấu cho cùng một tài nguyên. Khi xen kẽ vào thiết bị xuất chuẩn để tận dụng lợi thế của docker logs
nó có thể trở thành cơn ác mộng để phân tích nếu các nguồn không thể được xác định dễ dàng.
Coi chừng quá trình zombie
Nếu một trong các quá trình của bạn trong một vụ tai nạn container, giám sát viên có thể không thể dọn sạch những đứa trẻ trong trạng thái zombie, và chủ nhà sẽ không bao giờ thừa kế chúng. Một khi bạn sử dụng hết số lượng pids có sẵn (2 ^ 22, khoảng 4 triệu), một loạt các thứ sẽ thất bại.
Tách biệt mối quan tâm
Nếu bạn chạy hai thứ riêng biệt, như một máy chủ apache và logstash trong cùng một container, điều đó có thể dễ dàng xử lý nhật ký, nhưng bạn phải tắt apache để cập nhật logstash. (Trong thực tế, bạn nên sử dụng trình điều khiển đăng nhập của Docker) Nó sẽ là một điểm dừng duyên dáng chờ đợi các phiên hiện tại kết thúc hay không? Nếu đó là một điểm dừng duyên dáng, đôi khi có thể mất nhiều thời gian và trở nên dài hơn để tung ra phiên bản mới. Nếu bạn giết, bạn sẽ tác động đến người dùng cho một người gửi nhật ký và điều đó nên tránh IMHO.
Cuối cùng, khi bạn có nhiều quy trình, bạn đang tạo lại một HĐH và trong trường hợp này, việc sử dụng ảo hóa phần cứng có vẻ phù hợp hơn với nhu cầu này.