本文最后更新于:2023年12月5日 晚上
docker 仓库分为公有云仓库 和 私有云仓库
公有云仓库:
私有云仓库:
- docker registory
- docker harbor,推荐
阿里云 docker 仓库
- 访问凭证
- 命名空间
- 镜像仓库
范例:
私有云单机仓库 Docker Registry
官方文档:https://docs.docker.com/registry/
部署文档:https://github.com/docker/docs/blob/main/registry/deploying.md
https://blog.csdn.net/weixin_41605937/article/details/122367707
服务端
1. 生成证书
一路回车就可以
2.创建授权的 registry 用户和密码
创建用户还可以使用如下命令:
3. 启动容器
api:
查询、删除镜像:
客户端
1. 添加 hosts
2. 修改 daemon.json 并重启 docker
注意:修改 daemon.json 后需要重启 docker.service
3. 登陆
4. 上传&下载
Docker 之分布式仓库 Harbor
harbor 功能介绍:
- 基于角色的访问控制
- 镜像复制
- 图形化用户界面
- 审计管理
- 国际化
- resful api
- 部署简单
harbor 组成:
harbor 是由很多容器组成实现完整功能
- proxy:对应启动组件 nginx。它是一个 nginx 反向代理,代理 notary client(镜像认证)、docker client(镜像上传下载等)和浏览器的访问请求(core service)给后端的各服务
- UI(Core Service):对应启动组件 harbor-ui。底层数据存储使用 mysql 数据库,主要提供了四个子功能:
- UI:一个 web 管理页面 ui
- API:Harbor 暴露的 API 服务
- Auth:用户认证服务,decode 后的 token 中的用户信息在这里进行认证;auth 后端可以接 db、ldap、uaa 三种认证实现
- Token 服务(上图中未体现):负责根据用户在每个 project 中的 role 来为每一个 docker push/pull 命令发布一个 token,如果从 docker client 发送给 registry 的请求没有带 token,registry 会重定向请求到 token 服务创建 token
- registry:对应启动组件 registry。负责存储镜像文件,和处理镜像的 pull/push 命令。Harbor 对镜像进行强制的访问控制,Registry 会将客户端的每个 pull、push 请求转发到 token 服务来获取有效的 token
- admin service:对应启动组件 harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui 和 jobserver 启动时候需要加载 adminserver 的配置
- job service:对应启动组件 harbor-jobservice。负责镜像复制工作的,他和 registry 通信,从一个 registry pull 镜像然后 push 到另一个 registry,并记录 job_log
- log collector:对应启动组件 harbor-log。日志汇总组件,通过 docker 的 log-driver 把日志汇总到一起
- db:对应启动组件 harbor-db,负责存储 project、 user、 role、replication、image_scan、access 等的 metadata 数据
配置 harbor 仓库
两台 harbor 服务器 10.0.0.118 和 10.0.0.119 均按照以下步骤配置:
- 安装 docker
- 安装 docker compose,docker compose 必须先于 harbor 安装,否则会报错
- 下载 Harbor 安装包并解压缩
- 编辑配置文件 harbor.yml,旧版本是 harbor.cfg
- 运行 harbor 安装脚本
- 实现开机自动启动 harbor
- 登录 harbor 主机网站
- 建立项目
- 修改 harbor 配置
- 登录 harbor 主机网站
http://10.0.0.118
配置 docker 客户端
客户端 10.0.0.117
- 安装 docker
- 登录 harbor
- 给本地镜像大标签并上传到 harbor
- 下载 harbor 的镜像
- 建立项目
项目可以设置为“公开”,这样不用登陆就可以 pull,但是要想 push 还是得登陆
harbor 高可用
实现 harbor 有两种方式:共享存储 和 镜像复制,这里只学习后者,可以通过 web 界面直接配置镜像复制
前面配置了两台 harbor 仓库,10.0.0.118 和 10.0.0.119,但是只使用了一台,这里使用另一台组成双向复制
注意:不是主从,而是双向复制,通过负载均衡器将请求分流
h1:10.0.0.118
h2:10.0.0.119
确保 h1 和 h2 中有相同的项目
h1 和 h2 均新建仓库,目标分别为对方
复制模式选择 push-based
h1 和 h2 均新建复制,目标分别为对方
测试,分别在 h1 和 h2 上传(注意上传前先登录 harbor)然后删除,都能同步成功
harbor 配置 https
harbor 默认使用 http,可以配置 https,不过我认为没有这个必要
在前面配置好 harbor 仓库的基础上,执行以下操作:
配置服务端
访问:https://10.0.0.118
配置客户端