引言
随着容器化技术的普及,Docker私有镜像仓库成为开发团队和企业内部镜像管理的核心基础设施。DSM7.2群晖NAS凭借其易用性和扩展性,成为搭建私有仓库的热门选择。本文将通过YAML配置文件,结合docker-compose工具,详细演示如何在DSM7.2上快速部署私有镜像仓库(Registry),并实现基于HTTP Basic Auth的基本登录认证,确保镜像存储的安全性。
一、环境准备与工具安装
1.1 DSM7.2系统要求
- 硬件:建议4GB以上内存,100GB以上可用存储空间。
- 软件:DSM7.2或更新版本,已安装Docker套件。
- 网络:确保NAS可访问外网(用于拉取基础镜像),或已配置本地镜像源。
1.2 安装Docker套件
- 登录DSM管理界面,进入套件中心。
- 搜索“Docker”,点击安装。
- 安装完成后,启动Docker服务。
1.3 安装docker-compose
DSM7.2默认未集成docker-compose,需通过SSH手动安装:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
验证安装:
docker-compose --version
二、YAML配置文件详解
2.1 基础Registry配置
创建docker-compose.yml文件,内容如下:
version: '3.8'services:registry:image: registry:2container_name: private_registryports:- "5000:5000"volumes:- ./registry-data:/var/lib/registryrestart: unless-stopped
image: registry:2:使用官方Registry 2.x镜像。ports:将宿主机的5000端口映射到容器的5000端口(Registry默认端口)。volumes:持久化存储镜像数据到宿主机目录./registry-data。
2.2 添加HTTP Basic Auth认证
为实现登录认证,需生成用户名密码文件并配置Nginx反向代理。
2.2.1 生成密码文件
- 安装
htpasswd工具(若未安装):sudo apt-get install apache2-utils # 通过SSH执行
- 创建密码文件:
mkdir -p authhtpasswd -Bc auth/htpasswd <username>
输入密码后,会生成加密的密码文件
auth/htpasswd。
2.2.2 配置Nginx反向代理
修改docker-compose.yml,添加Nginx服务:
version: '3.8'services:registry:image: registry:2container_name: private_registryexpose:- "5000"volumes:- ./registry-data:/var/lib/registryrestart: unless-stoppednginx:image: nginx:alpinecontainer_name: registry_nginxports:- "5000:80"volumes:- ./nginx.conf:/etc/nginx/nginx.conf- ./auth:/etc/nginx/authdepends_on:- registryrestart: unless-stopped
创建nginx.conf文件:
events {}http {server {listen 80;server_name localhost;location / {auth_basic "Registry Authentication";auth_basic_user_file /etc/nginx/auth/htpasswd;proxy_pass http://registry:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}}
auth_basic:启用HTTP Basic Auth。auth_basic_user_file:指定密码文件路径。proxy_pass:将请求转发到Registry容器。
三、部署与验证
3.1 启动服务
在docker-compose.yml所在目录执行:
docker-compose up -d
等待服务启动完成后,检查容器状态:
docker-compose ps
3.2 验证Registry访问
-
测试未认证访问:
curl http://<NAS_IP>:5000/v2/_catalog
应返回
401 Unauthorized错误。 -
测试认证访问:
curl -u <username>:<password> http://<NAS_IP>:5000/v2/_catalog
若返回
{}(空仓库列表),则表示认证成功。
3.3 推送与拉取镜像
- 标记镜像:
docker tag <local_image> <NAS_IP>:5000/<image_name>:<tag>
-
登录Registry:
docker login <NAS_IP>:5000
输入用户名密码后,会生成
~/.docker/config.json文件存储认证信息。 -
推送镜像:
docker push <NAS_IP>:5000/<image_name>:<tag>
- 拉取镜像:
docker pull <NAS_IP>:5000/<image_name>:<tag>
四、高级配置与优化
4.1 启用TLS加密
为避免明文传输密码,建议配置HTTPS:
- 生成自签名证书:
mkdir -p certsopenssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt -subj "/CN=<NAS_IP>"
-
修改Nginx配置:
server {listen 443 ssl;server_name localhost;ssl_certificate /etc/nginx/certs/domain.crt;ssl_certificate_key /etc/nginx/certs/domain.key;location / {auth_basic "Registry Authentication";auth_basic_user_file /etc/nginx/auth/htpasswd;proxy_pass http://registry:5000;}}
- 更新
docker-compose.yml的卷映射:volumes:- ./nginx.conf:/etc/nginx/nginx.conf- ./auth:/etc/nginx/auth- ./certs:/etc/nginx/certs
- 重启Nginx容器:
docker-compose restart nginx
4.2 配置存储驱动
Registry默认使用文件系统存储,可配置为S3等对象存储:
services:registry:environment:REGISTRY_STORAGE_S3_ACCESSKEY: <access_key>REGISTRY_STORAGE_S3_SECRETKEY: <secret_key>REGISTRY_STORAGE_S3_BUCKET: <bucket_name>REGISTRY_STORAGE_S3_REGION: <region>volumes:- ./config.yml:/etc/docker/registry/config.yml
创建config.yml:
storage:s3:accesskey: <access_key>secretkey: <secret_key>bucket: <bucket_name>region: <region>
五、常见问题与解决
5.1 端口冲突
若5000端口被占用,修改docker-compose.yml中的端口映射:
ports:- "<new_port>:5000"
5.2 认证失败
- 检查
htpasswd文件路径是否正确。 - 确保Nginx配置中的
auth_basic_user_file路径与卷映射一致。
5.3 镜像推送失败
- 检查是否已登录Registry:
docker logout <NAS_IP>:5000docker login <NAS_IP>:5000
- 确认镜像标签是否包含Registry地址:
docker tag <image> <NAS_IP>:5000/<image>
六、总结与扩展
通过YAML配置文件和docker-compose工具,DSM7.2群晖NAS可快速部署带认证的Docker私有镜像仓库。本文涵盖了基础部署、HTTP Basic Auth认证、TLS加密等核心功能,并提供了故障排查指南。进一步优化方向包括:
- 集成LDAP/OAuth2认证。
- 配置镜像清理策略。
- 实现多节点高可用部署。
对于企业用户,建议结合群晖的Active Directory集成功能,实现与现有IT系统的无缝对接。通过私有镜像仓库,团队可高效管理内部镜像,提升开发协作效率。