Link to original video by The Linux Foundation

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

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

Tóm tắt ngắn:

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 unsharensenter mà không cần đến Docker hay Podman. Ông tạo các script step1, step2, step3, step4step5 để 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 rootpivot 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.