Giới thiệu
Private Docker registries là một cách thực tế để phân phối tài nguyên và chia sẻ images Docker giữa các containers. Thiết lập private registry sẽ tăng tốc độ phân phối và đảm bảo phát triển CI/CD suôn sẻ bằng nền tảng Docker .
Trong hướng dẫn này, hãy tìm hiểu cách thiết lập và cấu hình private Docker registry cho khả năng truy cập bên ngoài.
Điều kiện tiên quyết
- Một hệ thống thực thi Ubuntu.
- Truy cập dòng lệnh.
- Quyền quản trị trên hệ thống.
- Docker và Docker Compose đã được cài đặt.
- Đã cài đặt Nginx .
Private Docker Registry là gì
private Docker registry là registry instance containers được cài đặt trên máy chủ riêng và chỉ khả dụng cho người dùng được ủy quyền. Nó lưu trữ images ở một vị trí tập trung và cung cấp chúng cho tất cả các máy chủ Docker đã được xác thực.
Khi được thiết lập trên máy chủ, private Docker registry sẽ liên lạc với Docker Hub qua internet. Máy chủ pull và push images, lưu trữ cục bộ và chia sẻ chúng với các máy chủ Docker được ủy quyền. Máy chủ có thể truy cập repository cục bộ qua kết nối an toàn và sao chép images từ registry cục bộ để tạo containers.
Private Docker Registry và public
Registries Docker public và private có cùng công nghệ cơ bản nhưng các trường hợp sử dụng khác nhau.
Public registries lưu trữ images containers mà bất kỳ ai cũng có thể tải xuống và sử dụng. Bản chất truy cập mở của chúng khiến chúng trở thành một nơi tốt để các nhà phát triển chia sẻ các dự án nguồn mở của họ và được tiếp cận rộng rãi hơn. public Docker registry phổ biến nhất là Docker Hub , nơi lưu trữ hơn năm triệu images có sẵn public.
Private registries chứa các images containers độc quyền hoặc nhạy cảm không nhằm mục đích phân phối public. Bằng cách yêu cầu xác thực, Registries này hạn chế người có thể pull và push images, tạo ra môi trường phát triển an toàn hơn. Bằng cách thực thi cục bộ, Private registries cũng tăng tốc độ phát triển ứng dụng và tiết kiệm băng thông.
Cài đặt và cấu hình private Docker registry
Thiết lập máy chủ để lưu trữ private Docker registry yêu cầu thực thi dịch vụ registry, cấu hình máy chủ web Nginx và tạo các chứng chỉ bảo mật cần thiết. Thực hiện theo các bước bên dưới để cài đặt private Docker registry trên máy chủ.
Bước 1: Tạo thư mục registry
Tạo một thư mục dự án mới để lưu trữ tất cả các tệp cấu hình cần thiết. Các bước sau đây cho thấy cách tạo cấu trúc thư mục phù hợp:
1. Sử dụng lệnh mkdir sau để tạo thư mục dự án mới có nhãn registry và hai thư mục con, nginx và auth :
mkdir -p registry/{nginx,auth}
2. Tạo hai thư mục mới conf.d và ssl bên trong nginx
thư mục:
mkdir -p registry/nginx/{conf.d,ssl}
3. Đi tới thư mục registry và kiểm tra hệ thống phân cấp thư mục bằng cách sử dụng lệnh tree :
cd registry && tree
Lưu ý : Nếu bạn chưa có công cụ tree thì hãy cài đặt nó với đuôi sudo apt install tree
.
Đầu ra hiển thị cấu trúc cuối cùng của thư mục dự án registry .
Bước 2: Tạo Docker Compose Manifest và xác định dịch vụ
Tạo manifest compose.yaml mới cho Docker Compose. manifest xác định phiên bản Docker Compose và các dịch vụ cần thiết để thiết lập private registry. Các bước sau đây giải thích cách cấu hình tệp compose.yaml :
1. Sử dụng chương trình soạn thảo văn bản để tạo một tệp mới trong thư mục registry . Hướng dẫn này sử dụng Nano .
nano compose.yaml
2. Dán nội dung sau vào file:
version: '3'
services:
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
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d/:/etc/nginx/conf.d/
- ./nginx/ssl/:/etc/nginx/ssl/
networks:
- mynet
networks:
mynet:
driver: bridge
volumes:
registrydata:
driver: local
Dịch vụ đầu tiên được xác định trong manifest là dịch vụ registry . Định nghĩa dịch vụ bao gồm các dữ liệu sau:
- Vì Docker registry là một containers thực thi images registry nên images được định nghĩa là
registry:2
. - Việc thêm
restart: always
dòng đảm bảo dịch vụ registry Docker khởi động khi hệ thống khởi động. - Việc đặt giá trị Port để
5000:5000
cho Docker biết rằng Port 5000 bên trong containers đang thực thi sẽ ánh xạ tới Port 5000 trên hệ điều hành máy chủ . - Dịch vụ gắn ổ đĩa docker
registrydata
vàauth
thư mục cục bộ, cùng vớiregistry.passwd
tệp xác thực.
Dịch vụ khác thực thi máy chủ web Nginx. Cấu hình đặt dịch vụ thực thi trên các Port 80:80
(HTTPS) và 443:443
(HTTPS). Nó gắn kết các thư mục cục bộ cho cấu hình ảo ( conf.d
) và chứng chỉ SSL ( ssl
).
Cuối cùng, manifest xác định networks và volumes Docker được registry sử dụng. Mạng mynet
thực thi bằng trình điều khiển bridge , trong khi registrydata
volumesử dụng trình điều khiển cục bộ .
3. Lưu và đóng tệp.
Bước 3: Thiết lập chuyển tiếp Port Nginx
Thực hiện theo quy trình bên dưới để cấu hình máy chủ ảo Nginx bằng cách xác định tham số máy chủ trong tệp cấu hình.
1. Tạo một tệp máy chủ ảo mới có tên register.conf trong thư mục nginx/conf.d :
nano nginx/conf.d/registry.conf
2. Thêm nội dung sau, thay thế [domain] bằng địa chỉ miền của registry, ví dụ: example.com :
upstream docker-registry {
server registry:5000;
}
server {
listen 80;
server_name registry.[domain];
return 301 https://registry.[domain]$request_uri;
}
server {
listen 443 ssl http2;
server_name registry.[domain];
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
if ($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;
}
}
3. Lưu tệp và thoát.
Đoạn mã trên xác định các thành phần sau:
- Kết nối giữa Nginx và dịch vụ registry qua Port 5000 .
- server block listens trên Port 80 và thực hiện chuyển hướng HTTP sang HTTPS .
- server block listens trên Port 443 và cung cấp kết nối được mã hóa cho registry. block này cũng được cấu hình để chỉ cho phép kết nối từ các máy khách Docker có phiên bản 1.6 trở lên vì các phiên bản trước đó đã xử lý sai user agents.
Bước 4: Tăng kích thước tệp tải lên Nginx
Theo mặc định, Nginx giới hạn kích thước tệp tải lên ở mức 1MB . Vì nhiều Docker image vượt quá con số này nên cách tốt nhất là tăng kích thước tệp tối đa trên Nginx. Để đảm bảo tải lên thành công images lớn hơn, hãy làm theo các bước bên dưới để tăng giới hạn lên 2GB :
1. Tạo tệp cấu hình Nginx bổ sung bằng cách gõ:
nano nginx/conf.d/additional.conf
2. Thêm dòng sau vào tệp:
client_max_body_size 2G;
3. Lưu và đóng tệp.
Bước 5: cấu hình Chứng chỉ SSL và Xác thực cơ bản
Lưu ý : Nếu bạn chưa có chứng chỉ, hãy xem cách tạo yêu cầu ký chứng chỉ OpenSSL .
Tiến hành các bước dưới đây để sao chép chứng chỉ SSL của miền vào thư mục ssl trong dự án:
1. Sử dụng lệnh cp để sao chép tệp fullchain.pem :
cp [path-to-file]/fullchain.pem nginx/ssl/
2. Sao chép tệp privkey.pem :
cp [path-to-file]/privkey.pem nginx/ssl/
3. Vào thư mục xác thực :
cd auth
4. yêu cầu file mật khẩu mới được đặt tên registry.passwd
cho người dùng:
htpasswd -Bc registry.passwd [username]
5. Nhập mật khẩu mạnh và nhập lại để xác nhận. Đầu ra xác nhận sự thành công của hoạt động.
Bước 6: Thêm chứng chỉ CA gốc
Thêm chứng chỉ Root CA vào Docker và hệ thống máy chủ bằng cách làm theo quy trình bên dưới:
1. Xuất .crt
file bằng OpenSSL bằng cách gõ:
openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt
2. Tạo thư mục chứa chứng chỉ Docker:
mkdir -p /etc/docker/certs.d/registry.[domain]/
3. Copy chứng chỉ Root vào thư mục:
cp rootCA.crt /etc/docker/certs.d/registry.[domain]/
4. Tạo một thư mục mới có tên extra trong thư mục /usr/share/ca-certificates :
mkdir -p /usr/share/ca-certificates/extra/
5. Sao chép chứng chỉ gốc tương tự vào thư mục phụ :
cp rootCA.crt /usr/share/ca-certificates/extra/
6. Cấu hình lại gói vừa tạo ca-certificate
bằng cách gõ:
dpkg-reconfigure ca-certificates
7. Khởi động lại dịch vụ Docker để áp dụng các thay đổi:
systemctl restart docker
Bước 7: thực thi Docker registry
Với mọi thứ đã được thiết lập và sẵn sàng, hãy xây dựng bộ chứa Docker registry và Nginx bằng cách sử dụng Docker Compose:
1. Thực thi docker compose up
lệnh với -d
tùy chọn triển khai các container ở chế độ detached.
docker compose up -d
2. Kiểm tra xem registry và dịch vụ nginx có đang thực thi không:
docker compose ps
Đầu ra sẽ hiển thị các dịch vụ và Port được chỉ định của chúng.
Cách push images Docker vào private registry
1. Để push images từ máy chủ Docker sang máy chủ Private Docker Registry, hãy đăng nhập vào registry bằng lệnh sau:
docker login https://registry.[domain]/v2/
Ví dụ: để truy cập registry tại example.com , hãy nhập:
docker login https://registry.example.com/v2/
2. Nhập tên người dùng và mật khẩu đã tạo ở Bước 5 .
3. push image vào private registry bằng lệnh:
docker push registry.[domain]/[new-image-name]
pull images từ Docker Hub sang private registry
1. Để lưu trữ cục bộ images từ Docker Hub vào private registry, hãy sử dụng lệnh docker pull
:
docker pull [image]
2. Thêm thẻ vào images để gắn nhãn cho private registry:
docker image tag [image] registry.[domain]/[new-image-name]
3. Kiểm tra xem images Docker có sẵn cục bộ hay không bằng cách nhắc hệ thống liệt kê tất cả các images được lưu trữ cục bộ:
docker images
Phần kết luận
Sau khi làm theo hướng dẫn này, bạn có thể thiết lập thành công private Docker registry trên Ubuntu, cùng với máy chủ ảo Nginx và xác thực cơ bản. Sử dụng nó để quản lý images Docker và xây dựng containers trên máy chủ Docker từ xa.
Nếu bạn chưa quen với Docker, hãy đọc Cách quản lý containers Docker để tìm hiểu thêm về các phương pháp hay nhất để quản lý containers bằng Docker.
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment