|
#Trước khi có docker Giả sử có một ứng dụng: Web Application ├── Frontend ├── Backend └── Database Triển khai trên một ubuntu server ├── Nginx ├── Java ├── MySQL └── Application Đây gọi là Monolithic Architecture. Nếu backend lỗi: = Có thể ảnh hưởng toàn bộ hệ thống Nếu cần nâng cấp: => Deploy lại cả ứng dụng #Microservice là gì? Thay vì một ứng dụng lớn, ta chia thành nhiều dịch vụ nhỏ gọi là microservice: Web Application ├── User Service ├── Product Service ├── Order Service ├── Payment Service └── Notification Service Mỗi service:
Ví dụ: Order Service bị lỗi Không ảnh hưởng: User Service Product Service … #Docker giải quyết vấn đề gì? Giả sử có Order Service viết bằng Java. Trên Server A: cài Java 17 Trên Server B: cài Java 21 Trên Server C: chưa cài Java Vậy làm thế nào để Order service có thể chạy trên tất cả các server đó? Docker giải quyết bằng cách đóng gói: Application Java Runtime Libraries Dependencies thành một image duy nhất. Sau đó có thể deploy image đó ở bất cứ server nào đều chạy mà không phụ thuộc vào môi trường server. Yêu cầu duy nhất là các server phải cài đặt ứng dụng docker #Docker và Microservice kết hợp thế nào? Ví dụ hệ thống bán hàng: Frontend Order Service Product Service Payment Service Redis MySQL Mỗi thành phần chạy trong một container. Ubuntu Server ├── Container Frontend ├── Container Order ├── Container Product ├── Container Payment ├── Container Redis └── Container MySQL Mỗi container:
Ví dụ restart Payment: docker restart payment sẽ không ảnh hưởng Product. #Docker Compose Khi số lượng container tăng lên: Frontend Backend Redis MySQL Nginx Sẽ phải chạy tay nhiều lệnh sẽ rất mệt. Do đó chúng ta sẽ cần giải pháp khác thuận tiện và nhanh hơn. Đó chính là docker compose Docker Compose cho phép mô tả toàn bộ hệ thống trong chỉ 1 file .yaml Ví dụ: services: frontend: image: frontend backend: image: backend mysql: image: mysql redis: image: redis Khởi động: docker compose up -d Toàn bộ hệ thống chạy lên cùng lúc chỉ bằng 1 lệnh duy nhất #Giới hạn của Docker Docker phù hợp triển khai khi số lượng container ít: 5,10, 20 Nhưng khi hệ thống có: 200 containers … 500 containers Sẽ không thể quản lý thủ công được. Do đó cần 1 hệ thống chuyên nghiệp, quản lý tập trung, đảm bảo độ sẵn sàng cao. Lúc này sẽ cần Kubernetes (hay còn gọi là k8s)
|

