Docker for Backend & AI Engineers
Trang chủ / Module 9
🗃️ Module 9 / 12 · 4-5 ngày

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.

Docker HubECRTagging
📌 Vì sao module này quan trọng

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

RegistryThuộc hệ sinh tháiĐặc điểm
Amazon ECRAWSTích hợp chặt với ECS/EKS, IAM cho quyền truy cập
Azure ACRAzureTích hợp với AKS, hỗ trợ geo-replication
Google Artifact Registry (GCR cũ)GCPTích hợp với GKE, Cloud Build
GitHub Container Registry (GHCR)GitHubTí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ượcVí dụĐánh giá
Chỉ dùng latestmy-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 versioningmy-app:1.4.2✅ Tốt cho release có version rõ ràng
Git commit SHAmy-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ả 2Push cả my-app:1.4.2my-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
⚠️ Never deploy :latest to production

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

Thiết lập pipeline Tag & Push

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

✅ 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