Containers – A Look Under the Hood - Gerlof Langeveld, AT Computing

Tóm tắt ngắn:
- Bài thuyết trình giới thiệu khái niệm về container và cách thức hoạt động bên trong (look under the hood).
- Các điểm chính bao gồm: cách thức container cô lập các tiến trình (process) thông qua namespaces (UTS, IPC, PID, Mount, Network, User) và cgroups (control groups) để quản lý tài nguyên. Docker và Podman được nhắc đến như các công cụ triển khai container. Người thuyết trình hướng dẫn tạo một container đơn giản bằng cách sử dụng các lệnh
unshare
vànsenter
mà không cần đến Docker. Khái niệm về capabilities (khả năng) cũng được đề cập đến như một cơ chế quản lý quyền hạn trong container. - Ứng dụng chính là cô lập tiến trình, quản lý tài nguyên hiệu quả, và tăng tính bảo mật.
- Các quá trình được mô tả chi tiết bao gồm việc tạo container từng bước bằng cách sử dụng namespaces và cgroups, và việc sử dụng các lệnh
unshare
,nsenter
,change root
, vàpivot root
.
Tóm tắt chi tiết:
Bài thuyết trình được chia thành các phần chính sau:
Phần 1: Giới thiệu và so sánh cách tiếp cận truyền thống và containerized.
Người thuyết trình Gerlof Langeveld giới thiệu về container và mục đích của buổi nói chuyện là tìm hiểu cách thức hoạt động bên trong của container. Ông so sánh cách tiếp cận truyền thống (Unix) với cách tiếp cận containerized. Trong cách tiếp cận truyền thống, các tiến trình chia sẻ cùng một hệ sinh thái (môi trường, hostname, PID, hệ thống file, network stack, IPC objects, user IDs). Containerized approach thì khác biệt, các tiến trình được cô lập, có môi trường riêng (mini file system, hostname, PID, network stack), và có thể giới hạn tài nguyên. Ông bác bỏ quan điểm sai lầm cho rằng container là một "hộp phép thuật" được tạo ra ngay lập tức.
Phần 2: Namespaces và cách thức hoạt động.
Phần này giải thích chi tiết về namespaces, là cơ chế chính cho phép cô lập các tiến trình trong container. Mỗi loại namespace (UTS, IPC, PID, Mount, Network, User) quản lý một tập hợp tài nguyên riêng. Ông sử dụng lệnh nsenter
để minh họa việc kết nối đến namespace của một tiến trình đang chạy, và cho thấy sự khác biệt về view của hệ thống file giữa các namespace. Công cụ nsshow
được dùng để hiển thị thông tin về namespaces của các tiến trình.
Phần 3: Tạo container đơn giản bằng unshare và nsenter.
Phần thực hành này hướng dẫn người xem tạo một container đơn giản bằng cách sử dụng các lệnh unshare
và nsenter
mà không cần đến Docker hay Podman. Ông tạo các script step1
, step2
, step3
, step4
và step5
để minh họa từng bước tạo container, bao gồm việc tạo namespace UTS, IPC, PID, và Mount. Ông giải thích cách tạo vet pair để kết nối mạng giữa các namespace. Việc sử dụng pivot_root
để thay đổi root directory của container cũng được trình bày.
Phần 4: Mount namespace và quản lý hệ thống file.
Phần này tập trung vào Mount namespace, cho phép mỗi container có view riêng về hệ thống file. Ông giải thích về cơ chế change root
và pivot root
, và cách tạo một mini file system cho container bằng cách mount một hệ thống file tạm thời (tempfs) và sao chép các file cần thiết vào đó. Ông cũng giải thích về việc bind mount để chia sẻ một phần của hệ thống file host với container.
Phần 5: Capabilities và quản lý quyền hạn.
Phần cuối cùng giới thiệu về capabilities, một cơ chế quản lý quyền hạn tinh vi hơn so với mô hình truyền thống dựa trên UID. Ông giải thích cách capabilities cho phép cấp quyền hạn cụ thể cho các tiến trình, ngay cả khi chúng không chạy với UID root. Ông cũng chỉ ra cách Docker sử dụng capabilities để quản lý quyền hạn trong container thông qua tùy chọn --cap-add
, --cap-drop
, và --privileged
.
Câu nói đáng chú ý: "This is the unrealistic view of what is a container... What is a more realistic view?" Câu nói này nhấn mạnh sự khác biệt giữa quan niệm sai lầm và thực tế về cách hoạt động của container.