Sau khi đã chuẩn hóa cấu trúc thư mục và nguyên tắc quản lý container, bước tiếp theo không phải là viết ngay docker-compose.yml, mà là xác định kiến trúc tổng thể của Web Server khi đưa Docker vào.
Trong loạt bài này, Docker không được xem là mục tiêu, mà là một lớp triển khai có chọn lọc, tập trung vào những thành phần mang lại giá trị cao nhất – trước hết là MariaDB.
1. Nguyên tắc thiết kế kiến trúc Web Server dùng Docker
Kiến trúc tổng thể cần tuân thủ ba nguyên tắc cốt lõi:
1.1. Không Docker hóa mọi thứ
Docker không thay thế hệ điều hành
Không phải dịch vụ nào cũng cần container
Ưu tiên Docker hóa các thành phần:
cần cách ly
cần kiểm soát vòng đời
cần cấu hình riêng theo nhóm site
1.2. Host vẫn là trung tâm kiểm soát
Firewall
Nginx reverse proxy (có thể)
Backup orchestration
Monitoring tổng thể
Docker chỉ là lớp runtime dịch vụ, không phải nền tảng quản trị toàn hệ thống.
2. Kiến trúc tổng thể đề xuất
2.1. Sơ đồ khái niệm
Kiến trúc này phản ánh:
Giao tiếp bên ngoài → host
Dịch vụ lõi được Docker hóa có chọn lọc
Database được cách ly theo nhóm site
3. Vì sao ưu tiên Docker hóa MariaDB?
3.1. Database là điểm rủi ro cao nhất
Chứa dữ liệu sống còn
Nhạy cảm với cấu hình
Dễ gây sập hệ thống khi lỗi
Docker giúp:
Cách ly rủi ro giữa các nhóm site
Kiểm soát tài nguyên
Dễ backup / restore / di chuyển
3.2. MariaDB trong Docker ổn định hơn nếu làm đúng
Dữ liệu nằm ngoài container
Cấu hình được kiểm soát
Nâng cấp theo kế hoạch
Docker không làm MariaDB chậm hơn nếu kiến trúc đúng.
4. Phân vai chi tiết các thành phần
4.1. Nginx
Có thể chạy trên host
Là reverse proxy duy nhất ra Internet
Dễ tích hợp firewall, TLS, rate limit
Docker hóa Nginx không bắt buộc trong kiến trúc này.
4.2. PHP-FPM
Hai lựa chọn:
Chạy trên host → đơn giản, hiệu năng ổn định
Chạy trong Docker → dễ chạy song song nhiều phiên bản PHP
Kiến trúc cho phép kết hợp cả hai.
4.3. MariaDB (Docker)
Mỗi container = một nhóm site
Không expose Internet
Kết nối qua Docker network hoặc localhost
Đây là thành phần bắt buộc Docker hóa trong series này.
5. Network trong kiến trúc tổng thể
5.1. Phân tầng network
External (Internet → Host)
Internal (Host → Docker)
Docker internal network (DB)
Nguyên tắc:
MariaDB không mở port ra ngoài
Chỉ PHP / app mới truy cập DB
5.2. Kết nối MariaDB
Hai mô hình:
127.0.0.1:3307 → mariadb_sites_qms:3306Docker internal network nếu PHP cũng trong Docker
Ưu tiên:
Đơn giản
Dễ debug
Dễ kiểm soát firewall
6. Vòng đời triển khai dịch vụ
6.1. Triển khai theo nhóm
sites_web
sites_qms
sites_art
Mỗi nhóm:
có container riêng
có chính sách riêng
có lộ trình mở rộng riêng
6.2. Khi nào cần tách thêm container?
DB tăng tải
Backup quá lâu
Thay đổi chính sách replication
Khi đó:
tạo thêm
sites_qms_2di chuyển một phần database
7. Kiến trúc này giải quyết vấn đề gì?
Tránh “1 DB cho tất cả”
Không quá phân mảnh
Dễ vận hành
Dễ mở rộng
Dễ rollback
8. Những điều kiến trúc này không cố giải quyết
High Availability phức tạp
Multi-node orchestration
Kubernetes
Đây là kiến trúc Web Server thực tế, không phải cloud-native.
9. Kết luận
Kiến trúc Web Server dùng Docker hiệu quả là:
Docker hóa đúng chỗ
Giữ host làm trung tâm
Ưu tiên ổn định và khả năng vận hành
Trong loạt bài này, việc Docker hóa MariaDB theo nhóm site là bước đi chiến lược giúp:
Giảm rủi ro
Tăng khả năng kiểm soát
Chuẩn bị cho mở rộng trong tương lai
- Đăng nhập để gửi ý kiến
