一、Docker Registry 概述
Docker Registry 是 Docker 生态系统中的核心组件,负责存储、管理和分发 Docker 镜像。它是一个开源的服务器端应用程序,允许用户通过 HTTP API 上传、下载和管理 Docker 镜像。
核心特性
- 镜像存储:提供集中化的镜像存储解决方案,支持多层存储结构优化空间利用率
- 版本控制:通过标签(Tag)机制管理镜像的不同版本,支持版本回溯
- 访问控制:支持 Basic Auth、Token 等多种认证方式,保障私有镜像安全
- 分布式架构:可部署为多节点集群,提高可用性和扩展性
常见类型
- 公共 Registry:如 Docker Hub,包含大量官方和社区镜像
- 私有 Registry:企业自建仓库,如 Harbor、Nexus 等
- 云服务 Registry:AWS ECR、Google Container Registry 等云厂商提供的托管服务
二、安装 Docker Registry
环境准备
- 操作系统:Linux (CentOS 7+/Ubuntu 20.04+ 等)
- Docker 版本:1.10.0 或更高
- 硬件配置:建议 2 核 CPU、2GB 内存以上,存储空间根据镜像规模调整
基础安装步骤
- 拉取官方镜像:
docker pull registry:2
- 运行 Registry 容器:
docker run -d -p 5000:5000 \ --restart=always \ --name registry \ -v /mydata/registry:/var/lib/registry \ registry:2
-v
参数将容器内数据持久化到宿主机--restart=always
确保容器自动重启
- 验证安装:
curl http://localhost:5000/v2/_catalog
返回{"repositories":[]}
表示运行正常
三、详细配置指南
1. HTTP 安全配置
由于 Docker 默认要求 HTTPS,对于内网环境可配置 HTTP 访问:
- 修改
/etc/docker/daemon.json
:{ "insecure-registries": ["192.168.1.100:5000"] }
- 重启 Docker 服务:
systemctl daemon-reload systemctl restart docker
2. HTTPS 安全配置(生产环境推荐)
- 生成自签名证书:
mkdir -p /certs && cd /certs openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout domain.key -x509 -days 365 -out domain.crt
- 启动带 HTTPS 的 Registry:
docker run -d -p 443:5000 \ --name registry \ -v /certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
3. 用户认证配置
- 创建认证文件:
mkdir -p /auth docker run --entrypoint htpasswd registry:2 \ -Bbn username password > /auth/htpasswd
- 启动带认证的 Registry:
docker run -d -p 5000:5000 \ --name registry \ -v /auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ registry:2
4. Web UI 管理界面
- 部署 registry-ui:
docker run -d -p 8080:80 \ --name registry-ui \ -e REGISTRY_TITLE="My Private Registry" \ -e NGINX_PROXY_PASS="http://registry:5000" \ --link registry \ joxit/docker-registry-ui:latest
- 访问
http://localhost:8080
即可查看可视化界面
四、使用 Docker Registry
1. 镜像推送流程
- 标记镜像:
docker tag nginx:latest localhost:5000/my-nginx:v1
- 推送镜像:
docker push localhost:5000/my-nginx:v1
2. 镜像拉取流程
docker pull localhost:5000/my-nginx:v1
3. 查看仓库内容
curl http://localhost:5000/v2/_catalog
curl http://localhost:5000/v2/my-nginx/tags/list
五、高级配置与管理
1. 使用 Docker Compose 部署
创建 docker-compose.yml
:
services:
registry:
image: registry:2
ports:
- "5000:5000"
volumes:
- /mnt/registry:/var/lib/registry
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"
2. 存储清理与垃圾回收
docker exec -it registry /bin/registry garbage-collect \
/etc/docker/registry/config.yml
3. 备份策略
定期备份挂载的存储卷:
tar czvf registry-backup-$(date +%Y%m%d).tar.gz /mnt/registry
六、企业级方案对比
解决方案 | 类型 | 核心优势 | 适用场景 |
---|---|---|---|
Docker Registry | 开源 | 轻量级、易部署 | 小型团队、开发测试环境 |
Harbor | 企业级开源 | 安全扫描、RBAC、复制策略 | 中大型企业生产环境 |
AWS ECR | 云托管 | 深度集成AWS服务、自动加密 | AWS生态用户 |
Nexus | 多格式支持 | 支持Docker、Maven等多种仓库 | 已有Nexus基础设施企业 |
七、最佳实践建议
- 生产环境务必启用HTTPS,避免中间人攻击
- 定期清理旧镜像,设置保留策略(如仅保留最近5个版本)
- 监控存储使用情况,避免磁盘空间耗尽
- 实施备份策略,特别是对于关键业务镜像
- 考虑使用Harbor等企业级方案获取更完善的功能
通过以上配置和管理方法,您可以构建一个安全、高效的Docker Registry环境,满足从开发测试到生产部署的各种需求。
正文完