Chuyển đến nội dung chính

Bài 7: Docker Registry - Docker Hub và Private Registry

Làm việc với Docker Hub, tạo repositories, automated builds. Triển khai Private Registry với Docker Registry, Harbor. Image tagging strategies, versioning, vulnerability scanning và registry security best practices.

🔒 DevSecOps — Bài 7 Bài 7: Docker Registry - Docker Hub và Private Registry

Docker từ Cơ bản đến Nâng cao

Phần 2: Dockerfile và Image Optimization

xdev.asia

1. Docker Registry - Tổng quan

Docker Registry là dịch vụ lưu trữ và phân phối Docker images. Registry đóng vai trò trung tâm trong workflow CI/CD và deployment.

Các loại Registry phổ biến

  • Docker Hub: Public registry mặc định, miễn phí cho public repos

  • GitHub Container Registry (GHCR): Tích hợp với GitHub Actions

  • AWS ECR: Amazon Elastic Container Registry

  • Google Artifact Registry: GCP container registry

  • Azure Container Registry (ACR): Microsoft Azure

  • Harbor: Open-source enterprise registry

  • Docker Registry: Self-hosted open-source registry

2. Docker Hub

2.1. Tạo và quản lý Repositories

# Login vào Docker Hub
docker login

Tag image cho Docker Hub

docker tag myapp:latest username/myapp:1.0.0 docker tag myapp:latest username/myapp:latest

Push image

docker push username/myapp:1.0.0 docker push username/myapp:latest

Pull image

docker pull username/myapp:1.0.0

2.2. Automated Builds với GitHub

Docker Hub có thể tự động build image khi push code lên GitHub:

  1. Link GitHub repository với Docker Hub repository

  2. Cấu hình build rules (branch, tag patterns)

  3. Mỗi push sẽ trigger automated build

2.3. Webhooks

Docker Hub hỗ trợ webhooks để notify khi image được push thành công, phục vụ cho CI/CD pipeline.

3. Self-hosted Docker Registry

3.1. Triển khai Registry cơ bản

# Chạy registry đơn giản
docker run -d -p 5000:5000 --name registry \
    --restart=always \
    registry:2

Push image lên local registry

docker tag myapp:latest localhost:5000/myapp:1.0 docker push localhost:5000/myapp:1.0

Pull image từ local registry

docker pull localhost:5000/myapp:1.0

3.2. Registry với Storage và TLS

# docker-compose.yml cho production registry
services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    volumes:
      - registry-data:/var/lib/registry
      - ./certs:/certs:ro
      - ./auth:/auth:ro
    restart: always

volumes: registry-data:

# Tạo htpasswd file
docker run --rm --entrypoint htpasswd \
    httpd:2 -Bbn admin secretpassword > auth/htpasswd

# Login vào private registry
docker login registry.example.com

4. Harbor - Enterprise Container Registry

Harbor là open-source enterprise registry với nhiều tính năng nâng cao:

  • RBAC: Role-based access control

  • Vulnerability Scanning: Tích hợp Trivy

  • Image Signing: Cosign/Notary

  • Replication: Sync images giữa registries

  • Garbage Collection: Tự động cleanup

  • Audit Logs: Theo dõi mọi hoạt động

# Cài đặt Harbor (đã có bài viết riêng trong series)
# Tham khảo: "Cài đặt Harbor trên Ubuntu 24.04"

# Push image lên Harbor
docker login harbor.example.com
docker tag myapp:latest harbor.example.com/myproject/myapp:1.0
docker push harbor.example.com/myproject/myapp:1.0

5. Image Tagging Strategies

Semantic Versioning

# Major.Minor.Patch
docker tag myapp:latest myapp:1.2.3
docker tag myapp:latest myapp:1.2
docker tag myapp:latest myapp:1

Cho phép user chọn level of specificity

myapp:1 → latest 1.x.x

myapp:1.2 → latest 1.2.x

myapp:1.2.3 → exact version

Git-based Tagging

# Git commit SHA
docker tag myapp:latest myapp:abc1234

Git branch

docker tag myapp:latest myapp:main docker tag myapp:latest myapp:develop

Git tag

docker tag myapp:latest myapp:v1.2.3

Date-based Tagging

# Calendar versioning
docker tag myapp:latest myapp:2026.03.30
docker tag myapp:latest myapp:20260330-abc1234

6. Registry HTTP API

# Liệt kê repositories
curl https://registry.example.com/v2/_catalog

Liệt kê tags

curl https://registry.example.com/v2/myapp/tags/list

Xem manifest

curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json"
https://registry.example.com/v2/myapp/manifests/latest

7. Tổng kết

Trong bài này, bạn đã nắm được:

  • Các loại Docker Registry và use cases

  • Docker Hub: push, pull, automated builds, webhooks

  • Self-hosted registry với Docker Registry

  • Harbor enterprise registry overview

  • Image tagging strategies cho production

  • Registry HTTP API

Bài tiếp theo sẽ hướng dẫn Docker Compose cơ bản - deploy multi-container applications.