9.1 Kiến trúc Microservices
Docker đã trở thành công cụ không thể thiếu trong lập trình hiện đại. Nó giúp tạo, chạy và triển khai ứng dụng trong các container độc lập, làm cho ứng dụng trở nên tiện lợi, ổn định và dễ sử dụng. Trong bài giảng này, chúng ta sẽ xem xét các ví dụ nơi Docker giúp cuộc sống của lập trình viên và quản trị viên trở nên dễ dàng hơn rất nhiều.
Vấn đề
Phát triển ứng dụng monolith thường gặp khó khăn trong việc bảo trì và mở rộng. Bất kỳ thay đổi nào trong một phần có thể ảnh hưởng đến các phần khác, làm cho việc cập nhật và kiểm tra trở nên phức tạp.
Giải pháp với Docker
Docker cho phép áp dụng kiến trúc microservices, đóng gói mỗi service vào một container riêng biệt. Điều này đảm bảo tính độc lập và cô lập của các microservices.
Ví dụ
Giả sử bạn có một ứng dụng với ba microservices: người dùng, đơn hàng và thanh toán. Với Docker, có thể tạo ba container:
docker run -d --name users-service users-image
docker run -d --name orders-service orders-image
docker run -d --name payment-service payment-image
9.2 Tích hợp và triển khai liên tục (CI/CD)
Vấn đề
Việc phát triển, kiểm thử và triển khai thường mất nhiều thời gian, đặc biệt nếu môi trường làm việc khác nhau.
Giải pháp với Docker
Docker giúp tạo ra môi trường giống nhau cho tất cả các giai đoạn phát triển. Điều này đảm bảo rằng ứng dụng sẽ hoạt động giống nhau ở mọi nơi — từ phát triển đến sản xuất.
Ví dụ
Cài đặt CI/CD với Docker cho phép tự động hóa việc build, kiểm thử và triển khai:
Build image:
docker build -t my-app .
Chạy kiểm thử:
docker run my-app ./run-tests.sh
Triển khai:
docker push my-app:latest
ssh user@production-server "docker pull my-app:latest && docker run -d my-app"
9.3 Tính di động và nhất quán
Vấn đề
Thường thì ứng dụng chạy được trên một máy, nhưng lại từ chối chạy trên máy khác do sự khác biệt trong cấu hình hoặc phiên bản của dependencies.
Giải pháp với Docker
Docker cho phép đóng gói ứng dụng với tất cả dependencies của nó vào một container, đảm bảo chạy được trong bất kỳ môi trường nào.
Ví dụ
Với Dockerfile, bạn có thể mô tả dependencies và các lệnh để khởi chạy ứng dụng:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
Bây giờ ứng dụng sẽ chạy ổn định cả trên máy cục bộ, trên server hoặc trên cloud.
9.4 Đảm bảo bảo mật
Vấn đề
Triển khai ứng dụng có thể dễ bị tổn thương, đặc biệt nếu sử dụng thư viện và công cụ từ bên thứ ba.
Giải pháp với Docker
Docker cung cấp sự cô lập container, giảm rủi ro. Các container hoạt động độc lập, hạn chế ảnh hưởng đến hệ thống.
Ví dụ
Sử dụng các tham số để giới hạn tài nguyên và cải thiện bảo mật:
docker run -d --name secure-app --memory="512m" --cpus="1" --security-opt=no-new-privileges my-secure-app
9.5 Kiểm thử và tự động hóa
Vấn đề
Kiểm thử trên nhiều cấu hình khác nhau mất thời gian và có thể ảnh hưởng đến môi trường chính.
Giải pháp với Docker
Docker cho phép tạo môi trường kiểm thử được cách ly mà không ảnh hưởng đến hệ thống chính.
Ví dụ
Ví dụ chạy cơ sở dữ liệu và ứng dụng trong môi trường kiểm thử:
docker run -d --name test-db -e POSTGRES_PASSWORD=mysecretpassword postgres
docker run -d --name test-app --link test-db:db my-app
9.6 Điện toán đám mây và mở rộng quy mô
Vấn đề
Mở rộng quy mô ứng dụng trên đám mây có thể phức tạp và tốn kém.
Giải pháp với Docker
Docker giúp đơn giản hóa việc mở rộng nhờ tích hợp với các nền tảng đám mây như AWS, Azure và Google Cloud.
Ví dụ
Sử dụng Docker và Kubernetes, bạn có thể dễ dàng thiết lập mở rộng quy mô. Đây là một ví dụ về tệp yaml. Có thể bây giờ sẽ hơi khó hiểu, nhưng dần dần chúng ta sẽ hiểu rõ hơn.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 80
GO TO FULL VERSION