DSM7.2群晖NAS 使用YAML快速构建docker私有镜像仓库并实现基本登录认证
在这篇文章中,我们将介绍如何在DSM7.2群晖NAS上使用Docker构建一个私有镜像仓库,并为其添加基本认证以确保镜像的安全存储和访问。我们将使用Docker Registry和Docker Registry Browser来实现这一目标。
前提条件
- 群晖NAS设备运行DSM 7.2
- 群晖NAS上已安装Docker
步骤一:创建htpasswd
文件
首先,我们需要创建一个htpasswd
文件来存储用户的认证信息。我们将使用bcrypt
加密来确保密码的安全。
- 通过SSH登录到您的群晖NAS,输入
sudo -i
使用root用户进行新建操作。 - 使用
htpasswd
工具创建用户:
这将创建一个htpasswd -B -c /volume1/docker/registry/auth/htpasswd user1
htpasswd
文件并添加用户user1
。系统会提示您输入并确认密码。
步骤二:创建docker-compose.yml
文件
(以下操作方法2选1即可)
方法1:
使用文件管理在根目录下新建docker文件夹,再新建一个registry文件夹,目录路径为/volume1/docker/registry,剩下的按图操作,填入方法2中的yaml代码。
点击完成即可启动yaml项目,浏览器登录http://images.ceshi.com:6655,输入步骤一新建的用户密码。
方法2:
接下来,我们将编写一个docker-compose.yml
文件,以便使用Docker Compose启动我们的Docker Registry和Docker Registry Browser服务。
在群晖NAS上创建一个目录来存放我们的Docker配置文件:
mkdir -p /volume1/docker/registry
cd /volume1/docker/registry
在该目录下创建一个docker-compose.yml
文件,并添加以下内容:
version: '3.8'
# 使用bcrypt加密创建用户:htpasswd -B /volume1/docker/registry/auth/htpasswd user1
# 删除用户: htpasswd -D /volume1/docker/registry/auth/htpasswd user1
services:
# Docker Registry 服务配置
registry:
image: registry:2.8.3
container_name: registry
ports:
- "6666:5000" # 映射主机的 6666 端口到容器的 5000 端口
environment:
- REGISTRY_HTTP_ADDR=0.0.0.0:5000 # 配置 Registry 服务监听地址
- REGISTRY_AUTH=htpasswd # 启用 htpasswd 认证
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd # htpasswd 文件路径
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm # 认证领域
volumes:
- /volume1/docker/registry:/var/lib/registry # 挂载宿主机目录用于存储镜像
- /volume1/docker/registry/auth:/auth # 挂载 htpasswd 文件目录
restart: always # 自动重启策略
# Docker Registry Browser 服务配置
registry-browser:
image: klausmeyer/docker-registry-browser:latest
container_name: registry-browser
ports:
- "6655:8080" # 映射主机的 6655 端口到容器的 8080 端口
environment:
- DOCKER_REGISTRY_URL=http://images.ceshi.com:6666 # Docker Registry 地址
- ENV_DOCKER_REGISTRY_USE_SSL=false # 是否使用 SSL
- ENV_DOCKER_REGISTRY_USE_BASIC_AUTH=true # 启用基本认证
- ENABLE_DELETE_IMAGES=true # 启用删除镜像功能
- SECRET_KEY_BASE=e2fc714c4727ee9395f324cd2e7f331fbb473b54641b2042ff5612f05b983238 # 安全密钥
volumes:
- /volume1/docker/registry/auth:/auth # 挂载 htpasswd 文件目录
depends_on:
- registry # 依赖于 registry 服务
restart: always # 自动重启策略
# 定义数据卷
volumes:
registry-data:
driver: local # 使用本地驱动
步骤三:启动服务
使用以下命令启动Docker服务:
docker-compose up -d
这将根据docker-compose.yml
文件的配置启动Docker Registry和Docker Registry Browser服务。
步骤四:访问Docker Registry Browser
在浏览器中访问Docker Registry Browser的Web UI:
http://images.ceshi.com:6655
使用htpasswd
文件中创建的用户名和密码登录。您将能够看到所有存储在私有Docker Registry中的镜像,并进行管理。
步骤五:推送镜像到私有Docker Registry
以下是将镜像推送到私有Docker Registry的步骤:
-
登录到Docker Registry
docker login images.ceshi.com:6666
系统会提示您输入用户名和密码。输入
htpasswd
文件中设置的用户名和密码(例如:user1
)。
-
标记镜像
假设您已经有一个本地镜像,例如my-image:latest
,您需要将其标记为要推送到私有Docker Registry的镜像。docker tag my-image:latest images.ceshi.com:6666/my-image:latest
-
推送镜像
使用docker push
命令将标记的镜像推送到私有Docker Registry:docker push images.ceshi.com:6666/my-image:latest
-
验证推送
您可以在Docker Registry Browser中查看镜像是否成功推送。
常见问题解决
-
构建失败
- 确保可以正常pull镜像,如不行可以使用第三方的镜像库或手动上传镜像到群晖中
-
新用户无法登录
- 确保使用
bcrypt
加密创建新用户:htpasswd -B /volume1/docker/registry/auth/htpasswd newuser
- 确保
htpasswd
文件路径正确,并重启Docker Registry服务:docker-compose restart registry
- 查看用户:
cat /volume1/docker/registry/auth/htpasswd
- 确保使用
-
删除镜像
- 确保在
docker-compose.yml
中启用了删除功能:environment: - REGISTRY_STORAGE_DELETE_ENABLED=true
- 通过Docker Registry Browser Web UI或使用
curl
命令删除镜像。
- 确保在
通过以上步骤,您可以在DSM7.2群晖NAS上构建一个安全的私有Docker镜像仓库,并轻松管理您的镜像。