Docker私有仓库搭建步骤详解,零基础也能一次完成

前置准备


在开始 Docker私有仓库搭建 之前,你需要准备好以下环境:



  • 一台 Linux 服务器(Ubuntu 20.04 / CentOS 7+ 均可)

  • 已安装 Docker(若未安装,请先执行 curl -fsSL https://get.docker.com | sh

  • 开放端口 5000(仓库默认端口,云服务器需在安全组中放行)

  • 域名或 IP(生产环境建议绑定域名并配置 SSL)

  • 磁盘空间(镜像存储会很占空间,建议预留 20GB 以上)


注意:自建仓库默认仅支持 HTTP,生产环境必须使用 HTTPS。文中会给出两种方式:测试用 HTTP 和正规 HTTPS。

分步操作


1. 拉取 Registry 镜像


docker pull registry:2

此命令会自动从 Docker Hub 拉取最新版 Registry 镜像(约 26MB),你也可以指定版本,例如 registry:2.8


2. 运行容器(HTTP 测试版)


docker run -d \
--name my-registry \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
registry:2


  • -d:后台运行

  • --name:容器名称,方便管理

  • -p:映射宿主机 5000 端口到容器 5000 端口

  • -v:挂载数据卷,将镜像数据保存到宿主机 /data/registry 目录


检查容器是否运行docker ps 应看到 my-registry 状态为 Up。

3. 测试推送镜像(需修改 Docker 配置)


由于仓库使用 HTTP,需在 Docker 客户端添加 insecure-registries 配置。


编辑 /etc/docker/daemon.json


{
"insecure-registries": ["你的服务器IP:5000"]
}

重启 Docker:


sudo systemctl restart docker

然后拉一个测试镜像并打标签:


docker pull nginx:latest
docker tag nginx:latest 你的服务器IP:5000/nginx:latest
docker push 你的服务器IP:5000/nginx:latest

如果返回 successfully pushed,则搭建成功!


4. 配置 HTTPS(生产环境必做)


推荐使用 Nginx 反代 + Let's Encrypt 证书。


a. 获得证书(以 certbot 为例):


sudo apt install certbot nginx
sudo certbot --nginx -d reg.yourdomain.com

b. 配置 Nginx 反向代理


server {
listen 443 ssl;
server_name reg.yourdomain.com;

ssl_certificate /etc/letsencrypt/live/reg.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reg.yourdomain.com/privkey.pem;

location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}


重启 Nginx:sudo systemctl restart nginx


c. 客户端:现在可以直接用域名推送了,无需再配置 insecure-registries。


docker tag nginx:latest reg.yourdomain.com/nginx:latest
docker push reg.yourdomain.com/nginx:latest

避坑指南



  • 端口冲突:如果 5000 端口被占用,可以换其他端口,注意同时在防火墙和安全组放行。

  • 证书问题:使用自签名证书时,客户端需要信任该 CA,否则会报 x509 错误。建议用免费证书(Let's Encrypt)。

  • 权限问题/data/registry 目录所有者必须是 uid 1000(Registry 容器内用户),否则启动会报 permission denied。解决方法:sudo chown 1000:1000 /data/registry

  • 镜像删除后磁盘不释放:Registry 默认采用 GC(垃圾回收)机制,需手动触发:docker exec my-registry bin/registry garbage-collect /etc/docker/registry/config.yml

  • Docker 版本过旧:建议使用 Docker 20.10+,旧版本可能不支持 insecure-registries 或推送限制。


高频问题解答


Q1:如何查看仓库中的镜像列表?

通过 Registry API:curl http://你的IP:5000/v2/_catalog,返回 JSON 格式的镜像名列表。


Q2:如何删除仓库中的镜像?

Registry 默认不提供 HTTP DELETE 接口,需要启用 delete 配置。编辑 /etc/docker/registry/config.yml(挂载配置文件),添加 storage.delete.enabled: true,然后重启容器。之后可以用 curl -X DELETE 删除,但还需手动执行 GC 才能释放空间。


Q3:可以设置用户名密码吗?

可以。使用 htpasswd 创建密码文件,然后通过 REGISTRY_AUTH 环境变量启用基本认证。具体可参考官方文档。


Q4:仓库占用磁盘越来越大怎么办?

定期执行 GC 清理未引用的层。建议配合定时任务(cron)每月执行一次。


Q5:内网可以用域名吗?

当然可以,内网搭好 DNS 或 hosts 指向即可。如果域名没有公网解析,客户端需把域名解析到服务器内网 IP。


效果验证



  1. 浏览器访问 http://你的服务器IP:5000/v2/_catalog,应返回 {"repositories":[]} 或包含已推送的镜像。

  2. 执行 docker pull 你的服务器IP:5000/nginx:latest,若能正常下载则说明仓库正常工作。

  3. 检查数据目录:ls -lh /data/registry/docker/registry/v2/repositories/ 应看到你的镜像名。


就这样,整个 Docker私有仓库搭建 流程就走通了。

如果你正在处理 Docker私有仓库搭建,建议先按本文步骤完整执行,再根据自己的环境做微调;

遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
WP插件推荐必备:新手站长必备:从零开始的WP插件推荐与安装
下一篇
不花一分钱,服务器带宽流量优化实战指南
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意