1. Docker Engine là gì?
- Docker Engine là trái tim quản lý & chạy container.
- Modular Design:
- Thiết kế module dễ dàng thay thế các thành phần.
- Tuân thủ tiêu chuẩn OCI (Open Container Initiative).
2. Các thành phần chính
| Thành phần | Vai trò |
|---|
| Docker Client | Giao tiếp với Docker Engine |
| Docker Daemon | Nhận lệnh từ client, chuyển tiếp cho containerd |
| containerd | Quản lý vòng đời container, quản lý image |
| runc | Tạo container dựa trên OCI bundle |
| Shim | Duy trì container khi daemon khởi động lại, giữ STDIN/STDOUT |
3. Lược sử Docker Engine
- Docker ban đầu: Dùng
LXC + daemon nguyên khối.
- LXC chỉ hoạt động trên Linux → không hỗ trợ đa nền tảng.
- Docker Inc. tạo
libcontainer thay thế LXC (Docker 0.9).
- Đưa ra thiết kế platform-agnostic → chạy được trên Windows, Mac.
4. Tái cấu trúc thành kiến trúc module
- Trước: Docker daemon nguyên khối → khó đổi mới, khó bảo trì.
- Sau: Tách daemon thành nhiều thành phần nhỏ hơn, chuyên biệt.
- Cho phép thay thế linh hoạt → pluggable architecture.
5. Open Container Initiative (OCI)
- Ra đời: 2015 bởi Docker & cộng đồng.
- Quản lý bởi: Linux Foundation.
- Chuẩn hóa 2 spec:
- Image Spec: Quy định format của image.
- Runtime Spec: Quy định cách container được run.
6. Quy trình khởi chạy container
1. CLI chạy lệnh:
docker container run <flags> <image:tag>
2. Docker Client gửi yêu cầu API → Docker Daemon.**
**3. Daemon gọi containerd** để khởi tạo container.
4. containerd tạo OCI Bundle từ Docker Image.
**5. containerd giao cho runc** tạo container dựa trên bundle.
6. runc giao tiếp OS Kernel: namespaces, cgroups, capabilities.
7. Khi container start, runc thoát, shim trở thành parent giữ container hoạt động.
8. Container đã sẵn sàng chạy.
7. Công nghệ liên quan
- gRPC: Docker Daemon giao tiếp CRUD với containerd.
- OCI Bundle: Gói thông tin chuẩn tạo container.
8. Sơ đồ tổng thể quy trình
🖥️ Docker Client
↓ API
🛠️ Docker Daemon
↓ gRPC
📦 containerd
↓
🧱 runc → Kernel (namespaces, cgroups, capabilities)
↓
🧷 shim (giữ container sống)