1. Tổng quan về Docker
Docker là một nền tảng mã nguồn mở cung cấp giải pháp đóng gói ứng dụng vào các container nhẹ. Các container này bao gồm mã nguồn, thư viện và các phụ thuộc cần thiết để ứng dụng chạy độc lập.
Lợi ích chính:
- Đảm bảo tính nhất quán môi trường chạy
- Giảm thiểu phức tạp khi cấu hình môi trường
- Triển khai và phân phối ứng dụng nhanh chóng
2. Công nghệ Linux Container
Container Linux không mô phỏng toàn bộ hệ điều hành mà thực hiện cô lập tiến trình thông qua các không gian tên (namespaces) và nhóm điều khiển (cgroups).
Đặc điểm nổi bật:
- Khởi động nhanh (tính bằng giây)
- Tiêu thụ ít tài nguyên hệ thống
- Kích thước nhỏ gọn
Các công nghệ lõi:
- Namespaces: Cô lập tầm nhìn tiến trình
- Cgroups: Quản lý và giới hạn tài nguyên vật lý
- Hệ thống file UnionFS: Cho phép chia sẻ lớp lưu trữ
3. So sánh Docker và KVM
| Tiêu chí | Docker | KVM |
|---|---|---|
| Thời gian khởi động | Giây | Phút |
| Kích thước | MB | GB |
| Hiệu năng | Gần bằng vật lý | Giảm do ảo hóa |
4. Kiến trúc Docker
4.1 Các thành phần chính
+------------------+ +-------------------+
| Docker Client | <---> | Docker Daemon |
+------------------+ +---------+---------+
|
v
+---------+---------+
| Container Runtime |
| (containerd, runc)|
+-------------------+
4.2 Chi tiết thành phần
- Docker Client: Giao diện tương tác qua CLI hoặc API
- Docker Daemon: Quản lý vòng đời container
- Container Runtime: containerd và runc quản lý trực tiếp
5. Cài đặt Docker
Trên CentOS/RHEL:
# Cài đặt các gói phụ thuộc
yum install -y yum-utils device-mapper-persistent-data lvm2
# Thêm repository Docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Cài đặt Docker Engine
yum install docker-ce docker-ce-cli containerd.io
# Khởi động dịch vụ
systemctl start docker
systemctl enable docker
Cấu hình mirror tăng tốc:
{
"registry-mirrors": ["https://mirror.azure.cn"]
}
6. Quản lý Image
| Lệnh | Mô tả |
|---|---|
| docker pull | Tải image từ registry |
| docker images | Liệt kê image local |
| docker rmi | Xóa image |
| docker save | Lưu image thành file |
| docker load | Nạp image từ file |
7. Quản lý Container
# Tạo và chạy container
docker run -d --name my_container nginx
# Xem container đang chạy
docker ps
# Dừng container
docker stop my_container
# Xóa container
docker rm my_container
# Truy cập shell container
docker exec -it my_container bash
8. Mối quan hệ Image-Container
Image là template chỉ đọc, container là instance chạy của image với lớp ghi bổ sung. Một image có thể tạo nhiều container.
Ví dụ commit container thành image:
docker commit -m "Added net-tools" my_container custom_image:v1
9. Kiến trúc lưu trữ phân tầng
Docker sử dụng cơ chế phân tầng (layers) để quản lý image và container:
- Image: Gồm nhiều lớp chỉ đọc
- Container: Thêm lớp ghi trên cùng
- UnionFS: Kết hợp các lớp thành view thống nhất
# Kiểm tra các lớp image
docker image inspect nginx --format='{{.RootFS.Layers}}'