docker私有化镜像仓库部署
- [为 Registry 添加 HTTP 基本认证](#为 Registry 添加 HTTP 基本认证)
- docker-compose.yml编排文件
- [UI 界面如何使用认证](#UI 界面如何使用认证)
- 客户端使用方式
-
- [配置 insecure-registries](#配置 insecure-registries)
- 配置之后重启docker
- 操作镜像
部署docker仓库,并添加http访问认证
为 Registry 添加 HTTP 基本认证
创建 htpasswd 认证文件
bash
# 1. 安装 htpasswd 工具(如果没有)
sudo apt update && sudo apt install apache2-utils -y
# 2. 创建认证文件存放目录
mkdir -p ~/DockerRegistry/auth
# 3. 创建用户(替换 your-username 和 your-password)
htpasswd -Bbn your-username your-password > ~/DockerRegistry/auth/htpasswd
# 4. 添加更多用户(可选)
htpasswd -Bbn another-user another-password >> ~/DockerRegistry/auth/htpasswd
# 5. 查看已创建的用户
cat ~/DockerRegistry/auth/htpasswd

docker-compose.yml编排文件
yml
version: '3.8'
services:
registry-server:
image: registry:2.8.2
container_name: docker-registry
restart: always
ports:
- "5000:5000"
volumes:
- ./registry-data:/var/lib/registry
- ./auth:/auth
environment:
# 仅需启用删除功能,无需任何CORS配置
- REGISTRY_STORAGE_DELETE_ENABLED=true
# 启用 htpasswd 认证
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
registry-ui:
image: joxit/docker-registry-ui:main
container_name: docker-registry-ui
restart: always
ports:
- "8888:80"
environment:
# 关键:启用代理模式,UI将作为Registry的反向代理
- SINGLE_REGISTRY=true
- REGISTRY_TITLE=My Private Docker Registry
- DELETE_IMAGES=true
# 指向Registry服务,UI会代理此地址
- NGINX_PROXY_PASS_URL=http://registry-server:5000
depends_on:
- registry-server
UI 界面如何使用认证
(1)登录:http://192.168.11.103:8888/ 弹窗提醒输入账号密码即可
(2)或者修改 UI 的环境变量,让它自动携带认证信息
yml
registry-ui:
image: joxit/docker-registry-ui:main
container_name: docker-registry-ui
restart: always
ports:
- "8080:80"
environment:
- SINGLE_REGISTRY=true
- REGISTRY_TITLE=My Private Docker Registry
- DELETE_IMAGES=true
- NGINX_PROXY_PASS_URL=http://registry-server:5000
# 添加认证信息(注意:密码会明文存在于环境变量中)
- REGISTRY_USERNAME=your-username
- REGISTRY_PASSWORD=your-password
depends_on:
- registry-server
客户端使用方式
配置 insecure-registries
由于使用的是 HTTP 而非 HTTPS,Docker 客户端需要配置信任:
Linux下:
bash
sudo nano /etc/docker/daemon.json
bash
{
"registry-mirrors": [
"https://ghcr.nju.edu.cn",
"https://docker.1ms.run"
],
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
},
"insecure-registries": ["localhost:5000","192.168.11.103:8888","localhost:8888"]
}
window下:

配置之后重启docker
sudo systemctl restart docker
操作镜像
bash
# 1. 登录(会提示输入密码)
docker login 192.168.11.103:8888
# 输入用户名: xxx
# 输入密码: xxxxx
# 2. 推送镜像
docker tag ghcr.io/open-webui/open-webui:v0.8.12-cuda 192.168.11.103:8888/open-webui:v0.8.12-cuda
docker push 192.168.11.103:8888/open-webui:v0.8.12-cuda
# 3. 拉取镜像
docker pull 192.168.11.103:8888/open-webui:v0.8.12-cuda
# 4. 登出(可选)
docker logout 192.168.11.103:8888