1.7 Docker 仓库(Registry)详解
Docker 仓库(Registry)是用于存储、分发和管理镜像(Image)的中心服务,是实现镜像分享、自动化部署、团队协作及生产环境运维的基石。
一、核心概念
- Registry(注册服务器):镜像存储和分发的服务端应用(如 Docker Hub、Harbor、官方 registry)。
- Repository(仓库/镜像仓库):同一类镜像的集合(如
nginx
是一个 repository,包含多个版本)。 - Image(镜像):构建和运行容器的基础文件,是仓库中的具体对象,可以有多个标签(tag)。
- Tag(标签):同一仓库下镜像的不同版本标识(如
nginx:1.25
,nginx:latest
)。
二、仓库的类型
1. 公有仓库(Public Registry)
- 任何人都可拉取(pull)镜像。
- 典型代表:Docker Hub、Google Container Registry、Quay.io 等。
- 适合开源项目、公开分发、学习交流。
2. 私有仓库(Private Registry)
- 仅授权用户/团队可访问。
- 提供企业级权限管控、审计、安全扫描等功能。
- 典型代表:Harbor、私有部署的 registry、阿里云容器镜像服务等。
- 适合企业内部、敏感镜像、CI/CD 自动化场景。
三、常见 Registry 服务
1. Docker Hub
- Docker 官方公共仓库,社区最大。
- 支持免费/付费账户、团队管理、自动构建。
2. Docker 官方 Registry
- 官方开源 registry 镜像,支持本地/局域网私有部署。
- 部署简单,可自定义存储、认证等。
3. Harbor
- CNCF 毕业项目,企业级容器镜像仓库。
- 支持镜像管理、权限控制、镜像扫描、复制同步、图形化界面。
四、与 Registry 相关的常用命令
1. 拉取镜像(pull)
docker pull [仓库地址/]仓库名[:标签]
# 例:docker pull nginx:latest
# 私有仓库:docker pull registry.example.com/myapp:1.0
2. 推送镜像(push)
- 打标签(tag):
docker tag 源镜像[:标签] [仓库地址/]仓库名[:标签] # 例:docker tag myapp:latest registry.example.com/myapp:1.0
- 登录仓库(如私有仓库需认证):
docker login registry.example.com
- 推送镜像:
docker push registry.example.com/myapp:1.0
3. 搜索镜像(search)
docker search nginx
# 只适用于 Docker Hub,私有仓库需 Web 界面或 API
4. 删除镜像
- 本地删除:
docker rmi 镜像名:标签
- 仓库删除:依赖仓库支持(如 Harbor 提供 Web 界面删除)
五、私有 Registry 的搭建(以官方 registry 镜像为例)
-
启动 registry 容器
docker run -d -p 5000:5000 --name registry registry:2
-
推送镜像到私有仓库
# 打标签 docker tag hello-world localhost:5000/hello-world # 推送 docker push localhost:5000/hello-world
-
拉取镜像
docker pull localhost:5000/hello-world
-
配置 HTTPS 和认证(生产环境推荐)
- 自签/CA 证书
- 配置 basic auth 或集成 LDAP/企业认证
六、加速器(镜像加速服务)
- 由于网络原因,国内用户拉取 Docker Hub 镜像经常受限,可使用加速服务:
- 阿里云、DaoCloud、网易云、七牛云等均提供加速器地址。
- 配置方法(daemon.json):
{ "registry-mirrors": ["https://your-mirror.com"] }
- 加速器只影响拉取(pull),不影响私有仓库推送。
七、常见问题与安全建议
问题
- 拉取失败:检查网络、仓库地址、认证是否正确。
- 推送失败:检查权限、仓库空间、网络防火墙。
- Tag 错误:仓库地址和镜像名需一致,注意大小写和命名规范。
- 私有仓库未启用 HTTPS 被拒绝:可在测试环境用
insecure-registries
配置,生产务必启用 HTTPS。
安全建议
- 生产环境建议用私有仓库,并开启认证、TLS 加密。
- 定期扫描镜像安全漏洞(如 Harbor 支持自动扫描)。
- 控制仓库访问权限,防止敏感镜像泄露。
- 管理镜像生命周期,定期清理无用镜像。
八、Registry 相关命令速查
docker login registry.example.com # 登录仓库
docker logout registry.example.com # 登出仓库
docker tag myapp:1.0 registry.example.com/myapp:1.0 # 镜像打标签
docker push registry.example.com/myapp:1.0 # 推送镜像
docker pull registry.example.com/myapp:1.0 # 拉取镜像