Hướng dẫn cài đặt Private Docker Registry – Bài 11

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

  1. Tạo thư mục để chứa cấu hình:
    mkdir registry
    cd registry
    
  2. Tạo file docker-compose.yml vớ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
    
  3. Tạo thư mục để lưu dữ liệu:
    mkdir datas
    
  4. Chạy dịch vụ:
    sudo docker-compose up -d
    
  5. 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.

  1. Mở file và chỉnh sửa tệp sau để đổi port mặc định 80 thành 9999Private Docker Registry
  2. Tạo file config Nginx:
    cd /etc/nginx/conf.d/
    sudo vi domain.com.conf
    

    Dá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;
      }
    }
    
  3. Kiểm tra và reload Nginx:
    sudo nginx -t && sudo systemctl reload nginx
    
  4. 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

  1. Cấu hình domain trỏ về IP public của server trong trang quản lý DNS của bạn:Private Docker Registry
  2. 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
    
  3. Tạo chứng chỉ HTTPS:
    sudo certbot --nginx -d domain.com
    
  4. Tạo tài khoản/mật khẩu để xác thực Registry:
    sudo htpasswd -Bc /etc/nginx/registry.password elroy
    
  5. Chỉnh lại file cấu hình Nginx registry.elroydevops.tech.conf và thêm vào trong phần location:
    cd /etc/nginx/conf.d/

    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/registry.password;
    client_max_body_size 16384m;
    

    Private Docker Registry

  6. Reload lại Nginx:
    sudo nginx -t && sudo systemctl reload nginx
    

Private Docker Registry

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

  1. Pull thử 1 image:
    sudo docker pull elroydevops/car-serv
    
  2. Tag lại image để push lên registry:
    sudo docker tag elroydevops/car-serv:latest domain.com/car-serv:1.0.0
    
  3. Login vào registry:
    sudo docker login domain.com
    
  4. Push image:
    sudo docker push domain.com/car-serv:1.0.0
    
  5. Kiểm tra catalog image:
    curl -u elroy:yourpassword https://domain.com/v2/_catalog
    

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em