Docker 仓库详解与实战配置
Docker 仓库详解与实战配置
Docker 仓库(Registry)是用于存储、管理和分发 Docker 镜像的核心组件,根据访问权限可分为公有仓库和私有仓库。本文将详细介绍主流仓库的特点、配置步骤及实战操作,包括 Docker Hub、阿里云公有仓库、Registry 私有仓库和 Harbor 企业级私有仓库。
一、Docker 仓库核心概念
1.1 仓库定义与作用
Docker 仓库本质是镜像存储与分发的中心化服务,核心作用包括:
- 集中管理镜像版本(如 nginx:v1、nginx:v2);
- 实现镜像的跨环境共享(开发→测试→生产);
- 提供权限控制(如私有仓库限制镜像访问范围)。
1.2 仓库分类
分类 | 特点 | 典型代表 | 适用场景 |
公有仓库 | 公开访问,无需自建,部分提供免费存储 | Docker Hub、阿里云公有仓库 | 个人学习、开源项目镜像分发 |
私有仓库 | 仅限内部访问,需自建或付费,安全性高 | Registry、Harbor | 企业内部项目、敏感业务镜像管理 |
二、公有仓库实战
公有仓库无需本地部署,直接使用第三方提供的服务,适合快速获取或分享公开镜像。国内常用阿里云公有仓库(解决 Docker Hub 访问慢问题)。
2.1 阿里云公有仓库(推荐)
阿里云容器镜像服务提供免费镜像仓库和镜像加速器,支持国内快速访问,是企业和个人的首选公有仓库方案。
2.1.1 前期准备:创建阿里云镜像仓库
- 登录阿里云容器镜像服务控制台:https://cr.console.aliyun.com/;
- 创建命名空间(用于隔离不同项目 / 团队的镜像):
-
- 进入「命名空间」→ 点击「创建命名空间」;
-
- 命名空间名称:sy_rqtest(自定义,需唯一);
-
- 访问级别:选择「私有」(仅授权用户可访问)。
3.在命名空间下创建镜像仓库:
-
- 进入「镜像仓库」→ 点击「创建镜像仓库」;
-
- 仓库名称:linux(自定义,如存储 Linux 相关镜像);
-
- 仓库类型:选择「私有」;
-
- 其他配置默认,完成创建。
2.1.2 镜像上传步骤
- 登录阿里云仓库(从仓库「基本信息」中获取登录指令):
# 格式:docker login --username=阿里云账号名 仓库地址docker login --username=suifengsl crpi-kr9pt9e25t372onc.cn-hangzhou.personal.cr.aliyuncs.com
-
- 输入阿里云账号密码(若开启 2FA,需使用验证码登录),提示 Login Succeeded 即登录成功。
2.为本地镜像添加标签(阿里云仓库要求镜像标签格式为「仓库地址 / 命名空间 / 仓库名:版本号」):
# 示例:将本地 httpd:latest 镜像标记为目标仓库的 test 版本docker tag httpd:latest crpi-kr9pt9e25t372onc.cn-hangzhou.personal.cr.aliyuncs.com/sy_rqtest/linux:test
3.上传镜像到阿里云仓库:
docker push crpi-kr9pt9e25t372onc.cn-hangzhou.personal.cr.aliyuncs.com/sy_rqtest/linux:test
-
- 上传完成后,回到阿里云控制台「镜像仓库→版本管理」,可看到 test 版本的镜像。
2.1.3 镜像下载步骤
其他机器需使用镜像时,只需登录阿里云仓库并拉取:
# 登录仓库(同上传步骤1)docker login --username=suifengsl crpi-kr9pt9e25t372onc.cn-hangzhou.personal.cr.aliyuncs.com# 拉取镜像docker pull crpi-kr9pt9e25t372onc.cn-hangzhou.personal.cr.aliyuncs.com/sy_rqtest/linux:test
2.2 Docker Hub(官方公有仓库)
Docker Hub 是 Docker 官方维护的公有仓库,包含数百万公开镜像,但国内访问速度较慢,适合国外环境或学习使用。
2.2.1 核心特点
- 免费提供公开仓库(所有人可访问),付费提供私有仓库;
- 支持自动构建(关联 GitHub/GitLab 仓库,代码提交后自动构建镜像);
- 官方镜像(如 nginx、ubuntu)经过安全验证,优先选择。
2.2.2 基本操作
- 登录 Docker Hub:
docker login # 默认登录 Docker Hub,输入账号密码
2.上传镜像(标签格式:「Docker Hub 用户名 / 仓库名:版本号」):
# 示例:将本地 mynginx:v1 上传到用户 test 的 nginx 仓库docker tag mynginx:v1 test/nginx:v1docker push test/nginx:v1
3.下载镜像:
docker pull test/nginx:v1 # 拉取私有镜像需先登录docker pull nginx:latest # 拉取官方公开镜像无需登录
三、私有仓库实战(基础版:Registry)
Registry 是 Docker 官方提供的轻量级私有仓库镜像,仅包含核心存储功能,适合小型团队或简单场景使用。
3.1 部署 Registry 私有仓库
- 拉取 Registry 镜像(官方镜像名为 registry,推荐使用 2.x 版本):
docker pull registry:2
2.启动 Registry 容器(需配置端口映射和自动重启):
docker run -itd \--restart always \ # 容器随 Docker 服务自动启动--name registry \ # 容器名-p 5000:5000 \ # 端口映射:宿主机 5000 → 容器 5000(Registry 默认端口)registry:2
-
- 验证启动:docker ps | grep registry,若容器状态为 Up 则启动成功。
3.2 配置客户端信任私有仓库
Registry 默认使用 HTTP 协议,Docker 客户端默认拒绝非 HTTPS 的仓库访问,需手动添加信任:
- 修改 Docker 配置文件(所有需访问私有仓库的机器均需配置):
vim /etc/docker/daemon.json
2.添加 insecure-registries 字段(指定私有仓库地址,格式为「IP: 端口」):
{"registry-mirrors": [ # 原有镜像加速器配置(可选)"https://docker.m.daocloud.io","https://dockerproxy.com"],"insecure-registries": ["192.168.100.20:5000"] # 私有仓库地址(替换为实际 IP)}
3.重启 Docker 服务使配置生效:
systemctl daemon-reloadsystemctl restart docker
-
- 重启后需重新启动 Registry 容器:docker start registry。
3.3 镜像上传与下载
3.3.1 上传镜像
- 为本地镜像添加标签(格式:「私有仓库地址 / 镜像名:版本号」):
docker tag httpd:latest 192.168.100.20:5000/test:v1
2.上传镜像到私有仓库:
docker push 192.168.100.20:5000/test:v1
3.3.2 验证镜像存储
通过 HTTP 接口查看私有仓库中的镜像列表:
curl http://192.168.100.20:5000/v2/_catalog# 输出示例:{"repositories":["test"]}(表示仓库中有 test 镜像)# 查看 test 镜像的版本列表curl http://192.168.100.20:5000/v2/test/tags/list# 输出示例:{"name":"test","tags":["v1"]}
3.3.3 下载镜像
其他客户端机器配置信任后,直接拉取:
docker pull 192.168.100.20:5000/test:v1
3.4 Registry 局限性
- 无图形化界面,需通过命令或 API 管理;
- 无权限控制(默认所有人可上传 / 下载,需额外配置认证);
- 无镜像同步、日志审计等企业级功能,适合简单场景。
四、企业级私有仓库实战(Harbor)
Harbor 是 VMware 开源的企业级 Docker 仓库,在 Registry 基础上扩展了图形化界面、权限管理、镜像同步、日志审计等功能,满足企业级镜像管理需求。
4.1 Harbor 核心组件与架构
Harbor 由多个组件协同工作,架构如下:
组件类型 | 组件名称 | 核心作用 |
代理层 | Nginx | 分发前端 UI 访问和镜像上传 / 下载流量 |
存储层 | Registry v2 | 核心镜像存储服务 |
数据层 | MySQL/PostgreSQL | 存储用户权限、镜像元数据、审计日志 |
核心服务 | Core Services(Admin Server) | 提供 UI、API、认证(Auth)、Webhook 功能 |
辅助服务 | Replication Job Service | 实现多 Harbor 实例间的镜像同步 |
辅助服务 | Log Collector | 收集各组件日志,用于监控和问题排查 |
4.2 部署 Harbor(离线安装)
Harbor 提供离线安装包(包含所有依赖镜像),适合无外网环境,步骤如下:
4.2.1 前期准备
- 安装依赖:Harbor 依赖 docker 和 docker-compose(用于编排多组件容器):
# 确保 Docker 已安装(参考前文 Docker 部署章节)# 安装 docker-composeyum -y install docker-compose# 验证:docker-compose --version
2.下载 Harbor 离线安装包:
-
- 官方下载地址:https://github.com/goharbor/harbor/releases(选择 harbor-offline-installer-*.tgz 包);
-
- 国内备用地址:百度网盘(链接:https://pan.baidu.com/s/1YUbl_gHhiKpUfSwsIkWbZg,提取码:5669),下载 harbor-offline-installer-v1.10.10.tgz。
3.解压安装包:
tar -xzvf harbor-offline-installer-v1.10.10.tgzcd harbor # 进入解压后的目录(包含 harbor.yml 配置文件和 install.sh 安装脚本)
4.2.2 配置 Harbor
修改核心配置文件 harbor.yml,关键配置如下:
vim harbor.yml
设置访问地址:hostname 改为 Harbor 服务器的实际 IP(如 192.168.100.20):
hostname: 192.168.100.20
关闭 HTTPS(可选,测试环境简化配置):
注释掉 https 相关配置(生产环境建议启用 HTTPS,需准备 SSL 证书):
#https:# port: 443# certificate: /your/certificate/path# private_key: /your/private/key/path
设置管理员密码:修改 harbor_admin_password(默认密码为 Harbor12345,建议自定义):
harbor_admin_password: Harbor12345
4.2.3 安装并启动 Harbor
- 执行安装脚本:
./install.sh
-
- 脚本会自动加载离线镜像、生成配置文件并启动所有组件容器;
-
- 安装成功提示:✔ ----Harbor has been installed and started successfully----。
2.验证启动状态:
docker-compose ps # 查看所有 Harbor 组件容器状态(均为 Up 则正常)
4.2.4 访问 Harbor 图形化界面
- 打开浏览器,访问 http://192.168.100.20(hostname 配置的地址);
- 登录:用户名 admin,密码为 harbor.yml 中配置的 Harbor12345;
- 创建项目:
-
- 点击「项目→新建项目」;
-
- 项目名称:test(自定义);
-
- 访问级别:选择「私有」(仅授权用户可访问);
-
- 点击「确定」,完成项目创建。
4.3 配置 Docker 客户端信任 Harbor
同 Registry 配置,需让 Docker 客户端信任 Harbor 的 HTTP 地址:
- 修改 Docker 配置文件(所有需访问 Harbor 的机器):
vim /etc/docker/daemon.json
2.添加 Harbor 地址到 insecure-registries:
{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com"],"insecure-registries": ["192.168.100.20"] # Harbor 地址(无端口,默认 80)}
3.重启 Docker 服务:
systemctl daemon-reloadsystemctl restart docker# 重启 Harbor 组件(Docker 重启后 Harbor 容器会停止)cd /harbor # 进入 Harbor 安装目录docker-compose start
4.4 镜像上传与下载(Harbor)
4.4.1 上传镜像
- 登录 Harbor(Docker 客户端执行):
docker login http://192.168.100.20
-
- 输入 Harbor 用户名(如 admin)和密码,提示 Login Succeeded 即登录成功。
2.为本地镜像添加标签(格式:「Harbor 地址 / 项目名 / 镜像名:版本号」):
# 示例:将本地 httpd:latest 标记为 test 项目的 test1:v1 版本docker tag httpd:latest 192.168.100.20/test/test1:v1
3.上传镜像到 Harbor:
docker push 192.168.100.20/test/test1:v1
4.验证上传结果:
-
- 登录 Harbor 图形化界面→进入 test 项目→点击「镜像仓库」,可看到 test1 镜像及 v1 版本。
4.4.2 下载镜像
其他客户端机器配置信任后,登录并拉取:
# 登录 Harbordocker login http://192.168.100.20# 拉取镜像docker pull 192.168.100.20/test/test1:v1
4.5 Harbor 常用操作
操作需求 | 命令(需在 Harbor 安装目录执行) |
启动 Harbor | docker-compose start |
停止 Harbor | docker-compose stop |
重启 Harbor | docker-compose restart |
查看日志 | docker-compose logs -f |
卸载 Harbor | docker-compose down -v(删除容器和数据卷,谨慎执行) |
五、三种仓库对比与选型建议
仓库类型 | 优点 | 缺点 | 适用场景 |
阿里云公有仓库 | 无需自建,国内访问快,支持免费私有仓库 | 依赖第三方服务,敏感镜像存在安全风险 | 个人学习、企业非敏感镜像分发 |
Registry 私有仓库 | 轻量级,部署简单,资源占用低 | 无图形化界面,无权限控制,功能单一 | 小型团队、测试环境、临时镜像管理 |
Harbor 私有仓库 | 企业级功能(图形化、权限管理、镜像同步),安全性高 | 部署复杂,资源占用较高(需多容器) | 中大型企业、生产环境、敏感业务镜像管理 |
5.1 选型建议
- 个人 / 小团队学习:优先选择阿里云公有仓库(免费、国内访问快);
- 小型企业 / 测试环境:Registry 私有仓库(部署简单,满足基础需求);
- 中大型企业 / 生产环境:Harbor 私有仓库(企业级功能,安全可控)。
六、仓库管理最佳实践
6.1 镜像命名规范
统一的镜像命名规则可提高管理效率,建议格式:
[仓库地址/][项目名/][应用名]:[版本号]-[构建号]
- 示例 1(公有仓库):cr.aliyuncs.com/sy_rqtest/web/nginx:v1.20-20231001
- 示例 2(私有仓库):192.168.100.20/test/api-gateway:v2.1-58
命名要素说明:
- 仓库地址:区分不同仓库(如阿里云、Harbor);
- 项目名:隔离不同项目(如 web、api);
- 应用名:明确镜像对应的服务(如 nginx、mysql);
- 版本号:主版本(v1)+ 次版本(20),体现功能迭代;
- 构建号:CI/CD 自动生成(如日期、流水线编号),便于追溯构建来源。
6.2 镜像版本管理
- 避免使用 latest 标签:latest 默认为最新版本,但无法明确镜像内容,易导致环境不一致(建议用具体版本号,如 v1.0);
- 定期清理冗余镜像:
-
- 公有仓库:删除过时版本(保留近 3 个稳定版本);
-
- 私有仓库:通过 Harbor 图形化界面或 API 批量删除不再使用的镜像;
3.镜像安全扫描:
-
- Harbor 内置镜像扫描功能(菜单「项目→镜像仓库→扫描」),检测漏洞并及时更新基础镜像;
-
- 集成第三方工具(如 Trivy),在 CI/CD 流程中自动扫描镜像安全性。
6.3 权限控制策略
- 公有仓库:
-
- 公开镜像:设置为「公有」,方便外部访问;
-
- 私有镜像:仅授权团队成员访问(如阿里云仓库的「成员管理」功能)。
2.Harbor 私有仓库:
-
- 按项目分配权限(如 test 项目仅允许开发组上传,测试组下载);
-
- 创建角色并绑定权限(如「开发者」拥有上传 / 下载权限,「访客」仅拥有下载权限);
-
- 启用「镜像拉取策略」:限制只有指定 IP 或账号可拉取敏感镜像。
七、总结
Docker 仓库是镜像生命周期管理的核心,本文介绍了主流仓库的部署与使用:
- 公有仓库:阿里云仓库适合国内场景,操作简单,支持免费私有空间;Docker Hub 适合国际环境,镜像资源丰富。
- 私有仓库:Registry 轻量易部署,适合基础需求;Harbor 提供企业级功能,适合生产环境。
- 最佳实践:统一镜像命名规范,合理管理版本,严格控制权限,定期安全扫描,确保镜像管理的高效与安全。
根据团队规模和业务需求选择合适的仓库类型,并结合 CI/CD 流程(如 Jenkins)实现镜像的自动构建、推送和部署,可进一步提升容器化应用的交付效率。