Hướng Dẫn Chi Tiết Cách Tự Xây Dựng Container Registry Riêng Cho Bạn
Container Registry là một nền tảng lưu trữ hữu ích cho các nhà phát triển, nơi cho phép bạn đẩy và kéo các container image. Trong thế giới số ngày nay, có rất nhiều registry công khai và riêng tư như Docker Hub, Amazon ECR và Google Cloud Artifact Registry. Tuy nhiên, trong nhiều trường hợp, bạn có thể muốn tự lưu trữ các image của mình để đảm bảo quyền kiểm soát tối đa và sự an toàn cho dữ liệu của bạn.
Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết và thực tiễn từng bước để tự xây dựng Container Registry. Để theo kịp nội dung, bạn nên có một số kiến thức cơ bản về Docker, NGINX và các khái niệm liên quan đến container.
Container Image Là Gì?
Trước khi đi sâu vào Container Registry, chúng ta cần hiểu khái niệm về container image. Một cách đơn giản, container image là một gói chứa tất cả các tệp tin, thư viện và cấu hình cần thiết để chạy một container. Những image này được tổ chức thành các lớp, với mỗi lớp đại diện cho một tập hợp các thay đổi trên hệ thống tệp.
Cách phổ biến nhất để tạo container image là sử dụng Dockerfile:
bash
# Tạo một image
docker build -t pliutau/hello-world:v0 .
# Kiểm tra các image cục bộ
docker images
Khi bạn chạy lệnh trên, một container image mới sẽ được tạo và lưu trữ trên máy cục bộ của bạn. Nhưng nếu bạn muốn chia sẻ image này với người khác hoặc sử dụng nó trên một máy khác? Đó chính là lúc mà Container Registry trở nên cần thiết.
Container Registry Là Gì?
Container Registry là một nền tảng lưu trữ, nơi bạn có thể đẩy và kéo các container image. Các image được tổ chức thành các repository tương tự như các thư mục chứa các file, với chúng có cùng tên. Ví dụ, trên Docker Hub Registry, nginx
là tên của repository chứa nhiều version của image NGINX.
Một số registry có tính công khai, có nghĩa rằng bất kỳ ai cũng có thể truy cập và tải về các image trên đó. Các registry công cộng như Docker Hub là lựa chọn tối ưu cho các dự án mã nguồn mở. Trong khi đó, registry riêng tư cung cấp một phương thức để tăng cường bảo mật và quyền riêng tư cho các enterprise, nơi các image được lưu trữ trên đám mây hoặc tại chỗ. Các registry riêng tư thường đi kèm với những tính năng bảo mật nâng cao và hỗ trợ kỹ thuật.
Khi Nào Bạn Nên Tự Xây Dựng Container Registry?
Việc tự xây dựng Container Registry sẽ giúp bạn kiểm soát tốt hơn về cấu hình và cách thức lưu trữ các container image của mình. Đây là một lựa chọn lý tưởng khi bạn muốn giảm sự phụ thuộc vào các nhà cung cấp bên ngoài như AWS hoặc GCP. Đặc biệt, trong những ngành có yêu cầu quản lý chặt chẽ, việc tự lưu trữ trở thành một nhu cầu thiết yếu.
Có nhiều giải pháp container registry mã nguồn mở bạn có thể sử dụng, trong đó giải pháp được Docker hỗ trợ chính thức là registry. Điều này có nghĩa là bạn có thể chạy registry của riêng mình bên trong một container, vô cùng tiện lợi.
Các Bước Để Tự Xây Dựng Container Registry
Để bắt đầu xây dựng Container Registry, bạn sẽ cần thực hiện các bước sau:
Bước 1: Cài Đặt Docker và Docker Compose
Đầu tiên, bạn cần cài đặt Docker và Docker Compose trên máy chủ mà bạn chọn. Bạn có thể sử dụng bất kỳ máy chủ nào hỗ trợ Docker, ví dụ như một DigitalOcean Droplet với hệ điều hành Ubuntu. Sau khi đăng nhập vào máy chủ ảo của bạn, sử dụng lệnh sau để cài đặt Docker:
bash
sudo snap install docker
# Xác minh cài đặt
docker --version
docker-compose --version
Bước 2: Định Cấu Hình và Chạy Container Registry
Tiếp theo, hãy định cấu hình container registry của bạn với tệp compose.yaml
. Tệp này sẽ tạo một container registry với volume để lưu trữ các image và một volume để lưu trữ tài liệu mật khẩu:
yaml
services:
registry:
image: registry:latest
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./registry/registry.password:/auth/registry.password
- ./registry/data:/data
ports:
- 5000
Bạn cũng sẽ cần tạo một tệp mật khẩu bằng lệnh htpasswd
để xác thực người dùng.
Bước 3: Chạy NGINX để Xử Lý TLS
Docker Registry yêu cầu một chứng chỉ SSL hợp lệ để hoạt động. Bạn có thể sử dụng Let's Encrypt để lấy chứng chỉ. Hãy đảm bảo rằng bạn có một tên miền trỏ đến máy chủ của bạn.
Bạn cũng sẽ cần thêm dịch vụ NGINX vào tệp compose.yaml
và cấu hình tệp nginx.conf
để xử lý kết nối SSL:
yaml
services:
nginx:
image: nginx:latest
depends_on:
- registry
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/certs:/etc/nginx/certs
ports:
- "443:443"
Bước 4: Vận Hành Container Registry và NGINX
Sau khi hoàn thành cấu hình, hãy chạy các container registry và NGINX:
bash
docker-compose up
Trên máy khách, bạn có thể đăng nhập vào registry và đẩy hoặc kéo các image:
bash
docker login registry.pliutau.com
# Username: busy
# Password: bee
# Đăng nhập thành công
docker build -t registry.pliutau.com/pliutau/hello-world:v0 .
docker push registry.pliutau.com/pliutau/hello-world:v0
Các Lựa Chọn Khác
Ngoài việc xây dựng registry trên máy chủ, bạn cũng có thể chạy registry trên Kubernetes hoặc sử dụng dịch vụ registry được quản lý như Harbor, một giải pháp mã nguồn mở với các tính năng bảo mật tiên tiến. Nếu bạn muốn có giao diện người dùng cho registry của mình, bạn có thể cân nhắc các dự án như joxit/docker-registry-ui
.
Kết Luận
Việc tự xây dựng Container Registry giúp bạn có toàn quyền kiểm soát và tùy chỉnh theo nhu cầu riêng của mình. Bạn đã có tất cả thông tin cần thiết để bắt đầu từ việc cài đặt và cấu hình đến cách sử dụng registry này. Hãy thử nghiệm và lựa chọn giải pháp phù hợp nhất với yêu cầu của bạn. Cảm ơn bạn đã theo dõi hướng dẫn này!
source: viblo