Docker Registry hay 'Registry' là một ứng dụng phía máy chủ mã nguồn mở và có khả năng mở rộng cao, có thể được sử dụng để lưu trữ và phân phối hình ảnh Docker. Đây là một ứng dụng phía máy chủ đằng sau Docker Hub. Trong hầu hết các trường hợp sử dụng, Docker Registry là một giải pháp tuyệt vời nếu bạn muốn triển khai hệ thống CI/CD trong quá trình phát triển ứng dụng của mình. Private Docker Registry cung cấp nhiều hiệu suất hơn cho chu trình phát triển và sản xuất bằng cách tập trung tất cả các hình ảnh Docker tùy chỉnh của ứng dụng của bạn vào một nơi.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình Private Docker Registry trên máy chủ Ubuntu 18.04. Chúng tôi sẽ sử dụng máy chủ web Nginx và bảo vệ Registry bằng tên người dùng và mật khẩu (xác thực cơ bản).
Điều kiện tiên quyết
Cài đặt các gói phụ thuộc bằng lệnh sau.
Các gói gnupg2 và pass sẽ được sử dụng để lưu trữ xác thực mật khẩu vào sổ đăng ký docker. Và apache2-utils sẽ được sử dụng để tạo xác thực cơ bản và httpie sẽ được sử dụng để thử nghiệm.
Cài đặt Docker và Docker-compose bằng cách chạy lệnh sau.
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ docker và thêm nó vào thời gian khởi động.
Docker đã hoạt động và Docker-compose đã được cài đặt. Kiểm tra bằng lệnh bên dưới.
Và bạn sẽ thấy phiên bản Docker và Docker-compose được cài đặt trên hệ thống của mình.
- Tạo thư mục dự án
Tạo một thư mục mới cho dự án có tên là 'registry' và tạo các thư mục 'nginx' và 'auth' bên trong.
Sau đó, hãy đến thư mục 'registry' và tạo lại các thư mục mới bên trong 'nginx'.
Và kết quả là các thư mục dự án trông giống như hình ảnh sau.
- Tạo tập lệnh Docker-compose
Bây giờ chúng ta muốn tạo một tập lệnh docker-compose.yml mới để triển khai Docker Registry.
Đi tới thư mục 'registry' và tạo một tệp cấu hình mới 'docker-compose.yml'.
Trước tiên, hãy xác định phiên bản compose mà bạn muốn sử dụng và dịch vụ.
Sau đó, thêm dịch vụ đầu tiên có tên là 'registry'. Dịch vụ Docker Registry sẽ sử dụng hình ảnh docker do nhóm docker cung cấp 'registry:2. Nó sẽ gắn khối lượng docker 'registrydata' và thư mục cục bộ có tên 'auth' chứa tệp xác thực cơ bản 'registry.passwd'. Và cuối cùng, nó sẽ chạy trên hình ảnh docker tùy chỉnh có tên là 'mynet' và hiển thị cổng 5000 trên cả container và máy chủ.
Tiếp theo, cấu hình dịch vụ 'nginx' sẽ chạy các cổng HTTP và HTTPS và gắn thư mục cục bộ 'conf.d' để cấu hình máy chủ ảo và 'ssl' để chứng chỉ ssl.
Và cuối cùng, hãy định nghĩa mạng tùy chỉnh 'mynet' với trình điều khiển cầu nối và 'registrydata' với trình điều khiển cục bộ.
Lưu và đóng cấu hình.
Dưới đây là cấu hình đầy đủ:
- Cấu hình Nginx Virtual Host
Sau khi tạo tập lệnh docker-compose, chúng ta sẽ tạo máy chủ ảo và cấu hình bổ sung cho dịch vụ nginx.
Vào thư mục 'nginx/conf.d/' và tạo một tệp máy chủ ảo mới có tên là 'registry.conf'.
Dán cấu hình sau.
Lưu và đóng.
Tiếp theo, tạo cấu hình bổ sung để tăng max_body_size trên nginx. Thao tác này sẽ cho phép bạn tải lên hình ảnh docker có kích thước tối đa là 2GB.
Dán cấu hình bên dưới.
Lưu và đóng.
- Cấu hình Chứng chỉ SSL và Xác thực cơ bản
Sao chép các tệp chứng chỉ SSL của miền của bạn vào thư mục 'ssl'.
Bây giờ hãy đến thư mục 'auth' và tạo tệp mật khẩu mới 'registry.passwd'.
Tạo mật khẩu mới cho người dùng hakase.
Và quá trình thiết lập môi trường để triển khai Private Docker Registry đã hoàn tất.
Dưới đây là ảnh chụp màn hình các tệp và thư mục môi trường của chúng tôi.
- Chạy Docker Registry
Chạy Docker Registry bằng lệnh docker-compose bên dưới.
Và bạn sẽ nhận được kết quả như bên dưới.
Sau đó, hãy đảm bảo rằng dịch vụ đăng ký và nginx đã hoạt động. Kiểm tra bằng lệnh sau.
Bạn sẽ thấy dịch vụ 'registry' đang chạy trên cổng '5000' và dịch vụ 'nginx' sẽ hiển thị các cổng HTTP và HTTPS như bên dưới.
Nếu bạn đang sử dụng chứng chỉ tệp pem, hãy xuất chứng chỉ đó sang tệp .crt bằng lệnh OpenSSL.
Bây giờ hãy tạo một thư mục mới cho chứng chỉ docker và sao chép chứng chỉ Root CA vào đó.
Sau đó tạo một thư mục mới '/usr/share/ca-certificate/extra' và sao chép chứng chỉ Root CA vào đó.
Sau đó, cấu hình lại gói 'ca-certificate' và khởi động lại dịch vụ Docker.
- Tải xuống hình ảnh Docker
Tải xuống hình ảnh Docker mới bằng lệnh sau.
Khi hoàn tất, hãy gắn thẻ hình ảnh cho sổ đăng ký riêng tư bằng lệnh bên dưới.
Kiểm tra lại danh sách hình ảnh Docker trên hệ thống và bạn sẽ nhận được hình ảnh mới như bên dưới.
- Đẩy hình ảnh vào Private Local Registry
Đăng nhập vào Private Docker Registry bằng lệnh sau.
Nhập tên người dùng và mật khẩu dựa trên tệp 'registry.htpasswd'.
Bây giờ hãy kiểm tra hình ảnh docker có sẵn trên Registry không.
Và không có hình ảnh docker nào trên Registry.
Bây giờ hãy đẩy hình ảnh tùy chỉnh của chúng ta lên Private Docker Registry.
Kiểm tra lại và đảm bảo bạn nhận được hình ảnh docker 'ubuntu16' trên Private Repository.
Và cuối cùng, quá trình cài đặt và cấu hình Private Docker Registry với Nginx và Xác thực cơ bản đã hoàn tất thành công.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình Private Docker Registry trên máy chủ Ubuntu 18.04. Chúng tôi sẽ sử dụng máy chủ web Nginx và bảo vệ Registry bằng tên người dùng và mật khẩu (xác thực cơ bản).
Điều kiện tiên quyết
- Máy chủ Ubuntu 18.04
- Quyền root
- Cài đặt Dependencies
- Cài đặt Docker và Docker-compose
- Thiết lập Private Docker Registry
- Kiểm tra
Bước 1 - Cài đặt Package Dependencies
Trước hết, chúng ta sẽ cài đặt một số gói phụ thuộc để triển khai Private Docker Registry.Cài đặt các gói phụ thuộc bằng lệnh sau.
Mã:
sudo apt install -y gnupg2 pass apache2-utils httpie
Bước 2 - Cài đặt Docker và Docker-compose
Bây giờ chúng ta sẽ cài đặt docker và docker-compose từ kho lưu trữ Ubuntu chính thức.Cài đặt Docker và Docker-compose bằng cách chạy lệnh sau.
Mã:
sudo apt install -y docker.io docker-compose -y
Mã:
sudo systemctl start docker
sudo systemctl enable docker
Mã:
docker version
docker-compose version
Bước 3 - Thiết lập Private Docker Registry
Trong bước này, chúng ta sẽ cấu hình môi trường Docker Registry bằng cách tạo một số thư mục environment và tạo một số cấu hình bao gồm docker-compose.yml, nginx virtual host và cấu hình bổ sung, v.v.- Tạo thư mục dự án
Tạo một thư mục mới cho dự án có tên là 'registry' và tạo các thư mục 'nginx' và 'auth' bên trong.
Mã:
mkdir -p registry/{nginx,auth}
Mã:
cd registry/
mkdir -p nginx/{conf.d/,ssl}
Mã:
tree
- Tạo tập lệnh Docker-compose
Bây giờ chúng ta muốn tạo một tập lệnh docker-compose.yml mới để triển khai Docker Registry.
Đi tới thư mục 'registry' và tạo một tệp cấu hình mới 'docker-compose.yml'.
Mã:
cd registry/
vim docker-compose.yml
Mã:
version: '3'
services:
Mã:
#Registry registry: image: registry:2 restart: always ports: - "5000:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - registrydata:/data - ./auth:/auth networks: - mynet
Mã:
#Nginx Service nginx: image: nginx:alpine container_name: nginx restart: except-stopped tty: true ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ networks: - mynet
Mã:
#Docker Networksnetworks: mynet: driver: bridge#Volumesvolumes: registrydata: driver: local
Dưới đây là cấu hình đầy đủ:
Mã:
version: '3'services:#Registry registry: image: registry:2 restart: always ports: - Môi trường "5000:5000": REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - registrydata:/data - ./auth:/auth networks: - mynet#Nginx Service nginx: image: nginx:alpine container_name: nginx restart: except-stopped tty: true ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ networks: - mynet#Docker Networksnetworks: mynet: driver: bridge#Volumesvolumes: registrydata: driver: local
Sau khi tạo tập lệnh docker-compose, chúng ta sẽ tạo máy chủ ảo và cấu hình bổ sung cho dịch vụ nginx.
Vào thư mục 'nginx/conf.d/' và tạo một tệp máy chủ ảo mới có tên là 'registry.conf'.
Mã:
cd nginx/conf.d/
vim registry.conf
Mã:
upstream docker-registry { server registry:5000;}server { listen 80; server_name registry.hakase-labs.io; return 301 https://registry.hakase-labs.io$request_uri;}server { listen 443 ssl http2; server_name registry.hakase-labs.io; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; # Tệp nhật ký để gỡ lỗi error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location / { # Không cho phép kết nối từ docker 1.5 trở về trước # docker pre-1.6.0 không thiết lập đúng tác nhân người dùng khi ping, hãy bắt "Go *" tác nhân người dùng nếu ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { return 404; } proxy_pass http://docker-registry; proxy_set_header Host $http_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; proxy_read_timeout 900; }}
Tiếp theo, tạo cấu hình bổ sung để tăng max_body_size trên nginx. Thao tác này sẽ cho phép bạn tải lên hình ảnh docker có kích thước tối đa là 2GB.
Mã:
vim additional.conf
Mã:
client_max_body_size 2G;
- Cấu hình Chứng chỉ SSL và Xác thực cơ bản
Sao chép các tệp chứng chỉ SSL của miền của bạn vào thư mục 'ssl'.
Mã:
cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/
Mã:
cd auth/
Mã:
htpasswd -Bc registry.passwd hakase
NHẬP MẬT KHẨU MẠNH
Và quá trình thiết lập môi trường để triển khai Private Docker Registry đã hoàn tất.
Dưới đây là ảnh chụp màn hình các tệp và thư mục môi trường của chúng tôi.
Mã:
tree
- Chạy Docker Registry
Chạy Docker Registry bằng lệnh docker-compose bên dưới.
Mã:
docker-compose up -d
Sau đó, hãy đảm bảo rằng dịch vụ đăng ký và nginx đã hoạt động. Kiểm tra bằng lệnh sau.
Mã:
docker-compose ps
netstat -plntu
Bước 4 - Kiểm tra
Trước khi kiểm tra Private Docker Registry, chúng ta cần thêm chứng chỉ Root CA vào chính docker và vào hệ thống.Nếu bạn đang sử dụng chứng chỉ tệp pem, hãy xuất chứng chỉ đó sang tệp .crt bằng lệnh OpenSSL.
Mã:
openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt
Mã:
mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/
Mã:
mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/
Mã:
dpkg-reconfigure ca-certificates
systemctl restart docker
- Tải xuống hình ảnh Docker
Tải xuống hình ảnh Docker mới bằng lệnh sau.
Mã:
docker pull ubuntu:16.04
Mã:
docker image tag ubuntu:16.04 registry.hakase-labs.io/ubuntu16
Mã:
hình ảnh docker
- Đẩy hình ảnh vào Private Local Registry
Đăng nhập vào Private Docker Registry bằng lệnh sau.
Mã:
docker login https://registry.hakase-labs.io/v2/
Bây giờ hãy kiểm tra hình ảnh docker có sẵn trên Registry không.
Mã:
http -a hakase https://registry.hakase-labs.io/v2/_catalog
Bây giờ hãy đẩy hình ảnh tùy chỉnh của chúng ta lên Private Docker Registry.
Mã:
docker push registry.hakase-labs.io/ubuntu16
Mã:
http -a hakase https://registry.hakase-labs.io/v2/_catalog
Và cuối cùng, quá trình cài đặt và cấu hình Private Docker Registry với Nginx và Xác thực cơ bản đã hoàn tất thành công.