Private Registry คืออะไร?
Private Docker Registry คือที่เก็บ Docker Image ส่วนตัวบน Server ของคุณเอง ไม่ต้องพึ่ง Docker Hub เหมาะสำหรับทีมที่ต้องการความเป็นส่วนตัวสูงหรือ Pull ได้เร็วกว่าเพราะ Network ภายใน
วิธีที่ 1: ใช้ registry:2 อย่างง่าย
docker run -d \
--name registry \
--restart unless-stopped \
-p 5000:5000 \
-v registry_data:/var/lib/registry \
registry:2
วิธีที่ 2: Docker Compose พร้อม Basic Auth
version: '3.8'
services:
registry:
image: registry:2
container_name: docker_registry
restart: unless-stopped
ports:
- "5000:5000"
volumes:
- registry_data:/var/lib/registry
- ./auth:/auth
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: "Docker Registry"
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
registry_data:
สร้าง htpasswd สำหรับ Authentication
# ติดตั้ง htpasswd tool
apt-get install -y apache2-utils
# สร้างไฟล์ auth
mkdir auth
htpasswd -Bbn myuser mypassword > auth/htpasswd
Push Image ไป Private Registry
# Login
docker login localhost:5000 -u myuser -p mypassword
# Tag Image
docker tag myapp:latest localhost:5000/myapp:latest
# Push
docker push localhost:5000/myapp:latest
# Pull กลับ
mcp pull localhost:5000/myapp:latest
docker pull localhost:5000/myapp:latest
เพิ่ม HTTPS ด้วย Nginx Reverse Proxy
version: '3.8'
services:
registry:
image: registry:2
container_name: docker_registry
restart: unless-stopped
volumes:
- registry_data:/var/lib/registry
- ./auth:/auth
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: "Docker Registry"
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
nginx:
image: nginx:1.25-alpine
restart: unless-stopped
ports:
- "443:443"
- "80:80"
volumes:
- ./nginx/registry.conf:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt:/etc/letsencrypt:ro
depends_on:
- registry
volumes:
registry_data:
Nginx config (nginx/registry.conf)
server {
listen 443 ssl;
server_name registry.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/registry.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/registry.yourdomain.com/privkey.pem;
client_max_body_size 2048m;
location / {
proxy_pass http://registry:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
ใช้งานจาก Server อื่น
# Login จาก Server อื่น
docker login registry.yourdomain.com -u myuser -p mypassword
# Pull Image
docker pull registry.yourdomain.com/myapp:latest
# Push จาก CI/CD
docker tag myapp:v1.0 registry.yourdomain.com/myapp:v1.0
docker push registry.yourdomain.com/myapp:v1.0
Harbor: Private Registry ขั้นสูงกว่า
หากต้องการ GUI, Role-Based Access Control, และการ Scan Security ลองใช้ Harbor เป็น Enterprise-grade Registry:
# ติดตั้งผ่าน Helm (Kubernetes) หรือดาวน์โหลด installer
curl -L https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz | tar xz
cd harbor
cp harbor.yml.tmpl harbor.yml
# แก้ hostname และ SSL path ใน harbor.yml
./install.sh
สรุป
Private Docker Registry ด้วย registry:2 ติดตั้งง่าย เหมาะสำหรับทีมขนาดเล็กถึงกลาง ถ้าต้องการความครบครันมากขึ้นให้พิจารณาใช้ Harbor แทน

