CHƯƠNG 02 · Linux bên trong Container•BÀI 05 / 80

Namespaces: ranh giới nhìn thấy

Vì sao process trong container thấy filesystem và network khác host.

Nền tảng◷ 4 phút đọc1/4 trong chương

Nắm bản chất

Linux namespaces cô lập các dạng tài nguyên: PID, mount, network, UTS, IPC, user và cgroup namespaces. Một tiến trình trong PID namespace có thể thấy mình là PID 1 dù host gán một PID khác. Network namespace chứa interfaces, routing và socket tables riêng.

Namespaces cô lập góc nhìn, không tự đặt quota tài nguyên. Để hạn chế mức CPU/memory tiêu thụ cần cgroups. User namespaces có thể ánh xạ UID trong container sang UID khác ở host; điều này cải thiện mô hình bảo vệ khi được cấu hình đúng.

Luồng hoạt động

Host kernel→namespaces→container process

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

docker run -d --name ns-demo alpine:3.20 sleep 600
PID=$(docker inspect -f '{{.State.Pid}}' ns-demo)
echo "Host PID=$PID"
ls -l /proc/$PID/ns/
docker exec ns-demo ps -ef
docker rm -f ns-demo

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

So sánh PID của container trên host với PID thấy bên trong. Nếu host có nsenter và quyền thích hợp, dùng nó chỉ trên máy lab để kiểm tra namespace tương ứng.

Lỗi dễ mắc

!

Không kết luận container “an toàn như VM” chỉ vì nó có PID namespace. Container vẫn chia sẻ kernel; privileged mode làm suy yếu nhiều lớp cách ly.

Tự kiểm tra

Namespace nào giúp mỗi container có bảng routing riêng?Xem đáp án ↗

Network namespace.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.

→ Mở bảng lệnh tra cứu nhanh
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗