Container Registries
Docker Hub, registry riêng (ECR/ACR/GCR/GHCR), chiến lược đặt tag, và xác thực đẩy/kéo image an toàn.
Image build xong cần được lưu trữ và phân phối đến nơi triển khai — registry là "kho" trung tâm cho việc này. Chọn đúng registry và đặt tag đúng chiến lược là điều kiện để pipeline CI/CD (Module 10) hoạt động đáng tin cậy, và để rollback nhanh khi có sự cố.
🎯 Mục tiêu học tập
- Đẩy (push) và kéo (pull) image từ Docker Hub và registry riêng
- So sánh các registry riêng phổ biến: ECR, ACR, GCR, GHCR
- Áp dụng chiến lược đặt tag rõ ràng, hỗ trợ rollback nhanh
- Xác thực với registry an toàn, không lộ credential
Docker Hub — Registry công khai mặc định
docker login
docker tag my-app:latest myusername/my-app:1.0.0
docker push myusername/my-app:1.0.0
docker pull myusername/my-app:1.0.0
Phù hợp cho project mã nguồn mở hoặc thử nghiệm cá nhân — tài khoản miễn phí có giới hạn số lần pull và không có repository riêng tư không giới hạn, cần cân nhắc registry riêng cho dự án công ty/production.
Registry riêng — ECR, ACR, GCR, GHCR
| Registry | Thuộc hệ sinh thái | Đặc điểm |
|---|---|---|
| Amazon ECR | AWS | Tích hợp chặt với ECS/EKS, IAM cho quyền truy cập |
| Azure ACR | Azure | Tích hợp với AKS, hỗ trợ geo-replication |
| Google Artifact Registry (GCR cũ) | GCP | Tích hợp với GKE, Cloud Build |
| GitHub Container Registry (GHCR) | GitHub | Tích hợp liền mạch với GitHub Actions (Module 10), tiện cho repo đã ở trên GitHub |
Nguyên tắc chọn: dùng registry của cùng hệ sinh thái cloud nơi bạn deploy (Module 13 khoá AI Engineer) — giảm độ trễ pull image, đơn giản hoá việc cấp quyền qua IAM/RBAC sẵn có của platform đó, và thường có chi phí egress thấp hơn khi cùng hệ sinh thái.
Chiến lược đặt Tag
| Chiến lược | Ví dụ | Đánh giá |
|---|---|---|
Chỉ dùng latest | my-app:latest | ❌ Không nên — không biết chính xác version nào đang chạy, không rollback được |
| Semantic versioning | my-app:1.4.2 | ✅ Tốt cho release có version rõ ràng |
| Git commit SHA | my-app:a3f9c21 | ✅ Tốt nhất cho CI/CD — mỗi build map 1-1 với 1 commit cụ thể, dễ truy vết |
| Kết hợp cả 2 | Push cả my-app:1.4.2 và my-app:a3f9c21 cho cùng 1 image | ✅✅ Thực hành tốt nhất — vừa có version dễ đọc, vừa truy vết được chính xác commit |
Deploy bằng
tag latest lên production là một trong những thực hành rủi ro nhất — image đứng sau tag này
có thể thay đổi bất cứ lúc nào mà không ai hay biết chính xác đang chạy version nào, khiến rollback gần
như không thể thực hiện chính xác.
Xác thực an toàn với Registry
Trong CI/CD (Module 10), không bao giờ hard-code credential registry trong script — dùng cơ chế secret của CI platform (GitHub Actions Secrets, tương tự Databricks Secrets đã học ở khoá Databricks Module 12) và ưu tiên short-lived token hoặc OIDC federation (xác thực không cần lưu trữ credential dài hạn nào, CI platform tự trao đổi token ngắn hạn với cloud provider) thay vì access key cố định khi registry hỗ trợ.
🏋️ Bài tập thực hành
Tạo 1 tài khoản Docker Hub (hoặc GHCR gắn với GitHub có sẵn). Build 1 image, đặt đồng thời 2 tag (semantic version và git commit SHA), push cả 2 lên registry. Thử pull lại bằng từng tag để xác nhận cả 2 đều trỏ đúng image. Viết ra quy trình rollback: nếu version 1.4.2 lỗi, làm sao quay lại chạy 1.4.1 chỉ bằng thao tác đổi tag, không cần build lại.
📚 Tài nguyên học tập
-
Docker Hub — DocumentationTài liệu chính thức Docker HubDocs
-
AWS — Amazon ECR User GuideTài liệu chính thức Amazon ECRDocs
-
GitHub — Working with the Container registryTài liệu chính thức GitHub Container RegistryDocs
✅ Tự đánh giá hoàn thành
- Đẩy/kéo image thành công qua ít nhất 1 registry
- So sánh được ECR/ACR/GCR/GHCR và chọn đúng theo hệ sinh thái đang dùng
- Áp dụng chiến lược tag kết hợp semantic version + git SHA
- Không dùng tag latest cho deploy production, có quy trình rollback rõ ràng