Cách thiết lập Private Docker Registry trên Ubuntu 18.04 LTS

theanh

Administrator
Nhân viên
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
  • Máy chủ Ubuntu 18.04
  • Quyền root
Chúng ta sẽ làm gì?
  1. Cài đặt Dependencies
  2. Cài đặt Docker và Docker-compose
  3. Thiết lập Private Docker Registry
  4. 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
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.

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
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.
Mã:
sudo systemctl start docker
sudo systemctl enable docker
Docker đã hoạt động và Docker-compose đã được cài đặt. Kiểm tra bằng lệnh bên dưới.
Mã:
docker version
docker-compose version
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.


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}
Sau đó, hãy đến thư mục 'registry' và tạo lại các thư mục mới bên trong 'nginx'.
Mã:
cd registry/
mkdir -p nginx/{conf.d/,ssl}
Và kết quả là các thư mục dự án trông giống như hình ảnh sau.
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
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ụ.
Mã:
version: '3'
services:
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ủ.
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
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.
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
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ộ.
Mã:
#Docker Networksnetworks: mynet: driver: bridge#Volumesvolumes: registrydata: driver: local
Lưu và đóng cấu hình.

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
- 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'.
Mã:
cd nginx/conf.d/
vim registry.conf
Dán cấu hình sau.
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; }}
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.
Mã:
vim additional.conf
Dán cấu hình bên dưới.
Mã:
client_max_body_size 2G;
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'.
Mã:
cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/
Bây giờ hãy đến thư mục 'auth' và tạo tệp mật khẩu mới 'registry.passwd'.
Mã:
cd auth/
Tạo mật khẩu mới cho người dùng hakase.
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
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.
Mã:
docker-compose ps
netstat -plntu
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.


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
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 đó.
Mã:
mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/
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 đó.
Mã:
mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/
Sau đó, cấu hình lại gói 'ca-certificate' và khởi động lại dịch vụ Docker.
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
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.
Mã:
docker image tag ubuntu:16.04 registry.hakase-labs.io/ubuntu16
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.
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/
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.
Mã:
http -a hakase https://registry.hakase-labs.io/v2/_catalog
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.
Mã:
docker push registry.hakase-labs.io/ubuntu16
Kiểm tra lại và đảm bảo bạn nhận được hình ảnh docker 'ubuntu16' trên Private Repository.
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.

Tham khảo​

 
Back
Bên trên