Trong bài viết này, mình sẽ hướng dẫn từng bước để bạn có thể tự tạo một Docker Private Registry, có cấu hình HTTPS và có xác thực bằng tài khoản mật khẩu. Mình sẽ dùng các công cụ như Docker, Docker Compose, Nginx và Certbot. Bắt đầu thôi!
Xem thêm:
Docker Network là gì? Làm sao các container kết nối với nhau? – Bài 9
Hướng dẫn chạy MySQL và Adminer bằng Docker Compose – Bài 10
1. Cài đặt các công cụ cần thiết
Chúng ta sẽ cần 3 công cụ:
- Docker để chạy container
- Docker Compose để quản lý dịch vụ
- Nginx để làm reverse proxy
Chạy lệnh sau để cập nhật và cài đặt:
sudo apt update -y
sudo apt install nginx docker.io docker-compose -y
2. Khởi tạo Docker Registry
- Tạo thư mục để chứa cấu hình:
mkdir registry cd registry - Tạo file
docker-compose.ymlvới nội dung:version: '3' services: registry: image: registry:2 restart: always container_name: registry-server ports: - "5000:5000" volumes: - ./datas:/var/lib/registry - Tạo thư mục để lưu dữ liệu:
mkdir datas - Chạy dịch vụ:
sudo docker-compose up -d - Kiểm tra container:
sudo docker ps
3. Reverse Proxy bằng Nginx
Mặc định Docker Registry chỉ chạy ở cổng 5000 và chưa có domain. Ta sẽ dùng Nginx để chuyển tiếp domain sang cổng này.
- Mở file và chỉnh sửa tệp sau để đổi port mặc định 80 thành 9999

- Tạo file config Nginx:
cd /etc/nginx/conf.d/ sudo vi domain.com.confDán nội dung sau:
server { listen 80; server_name domain.com; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - Kiểm tra và reload Nginx:
sudo nginx -t && sudo systemctl reload nginx - Thử truy cập
http://IP/v2/_catalog— nếu thấy JSON là ok.
4. Cấu hình HTTPS và tài khoản bảo vệ Registry
- Cấu hình domain trỏ về IP public của server trong trang quản lý DNS của bạn:

- Cài Certbot và Apache Utils (tải apache2-untils dùng để tạo tài khoản mật khẩu đăng nhập vào docker private registry và tải Certbot để chứng thực HTTPS (Let’s Encrypt là một dịch vụ cung cấp chứng chỉ SSL/TLS miễn phí, và Certbot được thiết kế để tương tác với Let’s Encrypt để tạo ra và quản lý các chứng chỉ này):
sudo apt install apache2-utils certbot python3-certbot-nginx -y - Tạo chứng chỉ HTTPS:
sudo certbot --nginx -d domain.com - Tạo tài khoản/mật khẩu để xác thực Registry:
sudo htpasswd -Bc /etc/nginx/registry.password elroy - Chỉnh lại file cấu hình Nginx
registry.elroydevops.tech.confvà thêm vào trong phầnlocation:
cd /etc/nginx/conf.d/auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/registry.password; client_max_body_size 16384m;
- Reload lại Nginx:
sudo nginx -t && sudo systemctl reload nginx

Giờ bạn đã có Docker Private Registry với HTTPS và xác thực tài khoản!
5. Push thử một image lên Registry
- Pull thử 1 image:
sudo docker pull elroydevops/car-serv - Tag lại image để push lên registry:
sudo docker tag elroydevops/car-serv:latest domain.com/car-serv:1.0.0 - Login vào registry:
sudo docker login domain.com - Push image:
sudo docker push domain.com/car-serv:1.0.0 - Kiểm tra catalog image:
curl -u elroy:yourpassword https://domain.com/v2/_catalog