使用Docker官方registry镜像可快速搭建私有仓库:一条命令启动HTTP服务(端口5000),生产环境必须配置HTTPS+htpasswd认证,推送前需打标签、登录,HTTP客户端需配置insecure-registries。

用 Docker 官方 Registry 镜像快速搭建私有仓库,无需复杂依赖,一条命令就能跑起来,适合开发测试和中小团队内部使用。
准备基础环境
确保已安装 Docker(18.09+),并能正常运行容器。Registry 本身是标准容器,不依赖数据库或外部服务,推荐使用 Linux 主机(CentOS/Ubuntu 均可)。磁盘空间建议预留至少 10GB,用于存放镜像数据。
启动 Registry 容器(最简方式)
执行以下命令即可启动一个默认配置的私有仓库,监听本地 5000 端口:
docker run -d \ --restart=always \ --name registry \ -v /opt/registry:/var/lib/registry \ -p 5000:5000 \ registry:2
- /opt/registry 是宿主机持久化路径,用于保存镜像层数据,重启容器不会丢失
- 若端口被占用,可改用 -p 5001:5000 并同步调整后续推送地址
- 容器启动后可通过
curl http://localhost:5000/v2/验证是否响应{}
配置 HTTPS 和认证(生产必需)
内网直连可跳过,但一旦暴露在公网或需团队共用,必须启用 HTTPS + 用户认证,否则推送会被 Docker 客户端拒绝(报错:http: server gave HTTP response to HTTPS client)。
- 生成自签名证书(以域名
reg.example.com为例):mkdir -p certs && openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt - 创建用户认证文件(需先安装
htpasswd,如 Ubuntu 运行apt install apache2-utils):mkdir -p auth && htpasswd -Bbn testuser testpass > auth/htpasswd - 用证书和认证启动 Registry:
docker run -d \ --restart=always \ --name registry \ -v /opt/registry:/var/lib/registry \ -v $(pwd)/certs:/certs \ -v $(pwd)/auth:/auth \ -e "REGISTRY_HTTP_ADDR=0.0.0.0:443" \ -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \ -e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ -p 443:443 \ registry:2
推送与拉取镜像
假设 Registry 地址为 reg.example.com(HTTPS)或 localhost:5000(HTTP):
- 给本地镜像打标签:
docker tag nginx:alpine reg.example.com/my-nginx:latest - 登录(仅 HTTPS 或配置了
insecure-registries的 HTTP 仓库才支持):docker login reg.example.com(输入用户名密码) - 推送:
docker push reg.example.com/my-nginx:latest - 其他机器拉取前,需将证书复制到
/etc/docker/certs.d/reg.example.com/ca.crt(Linux)或配置 Docker Desktop 信任证书
不复杂但容易忽略:HTTP 仓库需在所有客户端的 Docker 配置中显式声明为“不安全”,而 HTTPS 则更安全、免配置,推荐优先使用。

















