归根结底,私有镜像仓库要想真正投入长期使用,重点在于把 Docker Registry 部署成一个可持久化、可访问、便于维护管理的核心组件:运行时需要挂载 /data/registry 并映射 5000 端口;客户端则必须将 insecure-registries 加入白名单;一旦用于生产环境,HTTPS 证书与 htpasswd 认证都不可缺少;如果还希望进一步提升管理体验,还可以额外部署 joxit/docker-registry-ui 这个 Web 可视化界面。

在 Linux 服务器上搭建私有镜像仓库,关键就是部署一个具备持久化存储、网络可访问性和后续可管理性的 Registry 服务。不建议在生产环境中直接使用裸 HTTP 仓库,但在测试或内网环境下可以快速启动验证;正式上线时,则必须补充 HTTPS 加密与访问认证机制。下面按四种常见场景,说明 Linux 服务器配置 Docker 私有镜像仓库的关键步骤与注意事项。
基础运行:一键启动 Registry 容器
确认 Docker 已正确安装并处于运行状态后,可执行以下命令快速启动一个最基础的私有仓库服务:
- 创建持久化目录:mkdir -p /data/registry
- 运行容器:docker run -d --restart=always --name registry -p 5000:5000 -v /data/registry:/var/lib/registry registry:2
- 此时仓库监听 https://localhost:5000,通常仅支持本机或内网环境直接访问
客户端信任:解决 “HTTP client to HTTPS server” 报错
Docker 默认不允许向 HTTP 私有仓库推送或拉取镜像。如果暂时未启用 HTTPS,就需要在所有需要访问该仓库的客户端上配置 insecure-registries 白名单:
- 编辑或新建 /etc/docker/daemon.json
- 添加字段:"insecure-registries": ["192.168.1.100:5000"](将 IP 替换为你的 Linux 服务器真实内网地址)
- 重启 Docker:systemctl restart docker
- 验证:执行 docker info | grep -A 1 "Insecure Registries",确认配置已经生效
生产就绪:挂载证书与用户认证
如果 Docker Registry 需要对外提供服务,或用于跨主机、跨网络访问,就必须启用 HTTPS 证书和基础认证,确保镜像传输安全与访问权限可控:
- 生成自签名证书(或使用 Let’s Encrypt 等正式 SSL 证书):openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days 365 -keyout domain.key -out domain.crt
- 创建认证文件:mkdir -p /opt/registry/{auth,certs} && docker run --rm httpd:alpine htpasswd -Bbn admin pass123 > /opt/registry/auth/htpasswd
- 启动带安全参数的容器:docker run -d --restart=always --name registry -p 443:5000 -v /opt/registry/certs:/certs -v /opt/registry/auth:/auth -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" registry:2
增强体验:添加 Web UI 界面
Docker Registry 原生并不提供图形化管理界面,若希望更直观地查看和管理镜像仓库内容,可以借助轻量级 UI 镜像进行增强:
- 使用 joxit/docker-registry-ui:static 配合 docker-compose 部署
- 关键配置项:REGISTRY_URL=https://registry:5000(容器之间通信使用服务名)、REGISTRY_TITLE=内部镜像中心
- UI 默认映射到宿主机 8092 端口,浏览器访问后即可查看仓库中的镜像列表、版本标签等信息
