Chroot (1979)
Bản chất Linux sử dụng cấu trúc file hệ thống phân cấp, và cấp cao nhất là / được gọi là thư mục gốc.
chroot có nghĩa là bạn chạy các chương trình có thư mục gốc đã thay đổi để chúng chỉ có thể truy cập vào một thư mục con nhất định và nó xuất hiện dưới dạng thư mục gốc của chúng. Điều này thường được thực hiện để tạo ra một môi trường bị cô lập.
Linux namespace (2002)
namespace là một tính năng của kernel Linux dùng để phân vùng tài nguyên sao cho một tập hợp các quy trình nhìn thấy một tập hợp tài nguyên và một tập hợp quy trình khác nhìn thấy một tập hợp tài nguyên khác.
ví dụ người dùng A tạo ra một file nào đó thì người dùng khác không thể truy cập vào được.
UnionFS (2004)
UnionFS là một loại hệ thống file có thể tạo ảo giác về việc hợp nhất nội dung của một số thư mục thành một mà không cần sửa đổi các nguồn (vật lý) ban đầu của nó. Nói một cách đơn giản là là mỗi khi thêm một file thì file đó được lưu dưới dạng một layer (lớp), nếu ghi nhiều file thì sẽ tạo ra nhiều lớp, nhưng đối với góc nhìn của người dùng thì các layer đó sẽ được gom lại thành một.
Nhưng tại sao?
Nhiều hình ảnh mà bạn sử dụng để tạo các bộ chứa của mình ví dụ ubuntu(72MB) hay nginx(133MB). Sẽ khá tốn kém nếu phân bổ nhiều không gian như vậy mỗi khi chúng ta muốn tạo vùng chứa từ những hình ảnh này. Nhờ hệ thống tệp liên hợp, Docker chỉ cần tạo layer (lớp) mỏng trên đầu hình ảnh và phần còn lại của nó có thể được chia sẻ giữa tất cả các vùng chứa. Điều này cũng mang lại lợi ích bổ sung là giảm thời gian bắt đầu, vì không cần sao chép các tệp hình ảnh và dữ liệu.
Cgroups (2007)
Cgroup là một tính năng của kernel Linux giới hạn và cô lập việc sử dụng tài nguyên (CPU, bộ nhớ, I / O đĩa, mạng, v.v.) của một tập hợp các quy trình.
Cgroups cung cấp các tính năng sau:
Giới hạn tài nguyên – Bạn có thể định cấu hình cgroup để giới hạn lượng tài nguyên cụ thể (ví dụ: bộ nhớ hoặc CPU) mà một quy trình có thể sử dụng.
Ưu tiên – Bạn có thể kiểm soát lượng tài nguyên (CPU, đĩa hoặc mạng) mà một quy trình có thể sử dụng so với các quy trình trong cgroup khác khi có tranh chấp tài nguyên.
Kiểm soát – Bạn có thể thay đổi trạng thái (đóng băng, dừng hoặc khởi động lại) của tất cả các quá trình trong một nhóm cgroup bằng một lệnh duy nhất.
Docker (2013)
Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa, bản chất vẫn là dựa vào các công nghê có sẵn, kết hợp và hoàn thiện, đưa ra một giải pháp tương tác CLI đơn giản và thân thiện với người dùng.
Những hiểu lầm thường thấy
so sánh với máy ảo
Thực chất Docker và máy ão là hoàn toàn khác nhau. Bản chất Máy ão là ão hóa ở cấp độ phần cứng, còn Docker là ở mức hệ điều hành.
máy ão một khi được khởi tạo thì nó sẽ chiếm dụng hết phần tài nguyên được cấp cho dù các tiến trình bên trong máy ão không sử dụng hết. chưa kể đến cũng phải cấp một phần tài nguyên cho hệ điều hành của máy ão.
còn về container (Docker nói riêng) thì nó chỉ chiếm dụng tài nguyên dựa vào tiến trình bên trong container, và chúng ta có thể tăng hoặc giảm mức chiếm dụng tài nguyên của container.
Do đó container sẽ sử dụng tài nguyên một cách hiều quả hơn.
Docker là một công nghệ
Như đã nói ở trên thì Docker khôn phải là một công nghệ, Docker là một nền tảng mở để phát triển, vận chuyển và chạy các ứng dụng dưới dạng container.