目录
6, 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移
7, 如需重新部署,需要移除 Harbor 服务容器全部数据
一 Docker 私有仓库概念介绍
1, Docker 私有仓库是什么
Docker私有仓库是一种用于存储和分发Docker镜像的服务器服务,它允许组织在其内部网络中托管自己的Docker镜像集合,而不是依赖于公共的Docker镜像仓库,如Docker Hub
2,Docker 私有仓库 优势
-
安全性增强:对于包含敏感信息或专有软件的镜像,私有仓库提供了额外的安全层。组织可以控制访问权限,确保只有授权用户才能下载和推送镜像。
-
降低依赖风险:使用私有仓库,可以避免因公共仓库中的镜像被移除或更新而导致的依赖中断问题,确保持续且稳定的开发和部署环境。
-
性能优化:相比于从公网上的公共仓库拉取镜像,内部网络中的私有仓库可以提供更快的下载速度,减少网络延迟。
-
成本节约:对于频繁拉取大型镜像的情况,私有仓库可以减少对外部带宽的消耗,从而节省成本。
-
合规性要求:对于需要满足特定法规或内部政策的组织,私有仓库可以更好地实现镜像的审计、跟踪和管理,确保符合规定。
-
定制化管理:私有仓库如Harbor提供了额外的管理功能,如用户权限管理、镜像复制、访问控制策略等,便于企业级的镜像管理。
二 搭建本地私有仓库
1, 首先下载 registry 镜像
2,在 daemon.json 文件中添加私有镜像仓库地址
vim /etc/docker/daemon.json
{ "insecure-registries": ["192.168.217.77:5000"],
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
3,重启docker
4,运行 registry 容器
4.1 启动容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
-----------------------------------------------------------------------------------------
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always:这是重启的策略,在容器退出时总是重启容器
--name registry:创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像
4.2 延伸 Docker容器的重启策略
no:默认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
5, 测试私有仓库的上传与下载
5,1 测试上传
先生成一个新镜像
上传到私有仓库
列出私有仓库的所有镜像
[root@localhost ~]#curl http://192.168.217.77:5000/v2/centos/tags/list
{"name":"centos","tags":["v1"]}
------------------------------------------------------------------------
这条命令及其输出展示了使用curl工具向私有Docker registry(位于IP地址192.168.217.77,端口5000)发起HTTP GET请求的过程,目的是查询名为centos的镜像有哪些可用的标签(tags)。输出结果表明,centos镜像有一个名为v1的标签。
v2 指的是Docker registry的V2 API版本。
centos 是查询的镜像名称。
/tags/list 表示请求的是该镜像的所有标签列表。
5.2 测试下载
删除 所有centos 镜像
下载 私有仓库的centos 镜像
三 Harbor 简介
1, 什么是Harbor
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP (身份认证系统)集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。
2,harbor 与本地私有仓库 对比
Harbor的特点:
企业级功能:Harbor提供了丰富的企业级特性,包括用户管理、权限控制(基于角色的访问控制RBAC)、镜像复制、镜像签名和扫描(查找镜像中的漏洞)、图形化用户界面(GUI)、日志审计等,这些都是基础Docker Registry所不具备的。
安全性:Harbor增强了安全性,支持镜像的加密存储、访问控制和安全扫描,有助于保护敏感数据和预防潜在的安全威胁。
易用性:Harbor提供了用户友好的Web界面,使得镜像的管理、用户权限分配、策略配置等工作变得直观且方便。
集成性:Harbor能够与现有的身份认证系统(如LDAP/AD)集成,便于在企业内部署时利用现有的用户管理体系。
高可用性:Harbor设计支持高可用部署,可以轻松地在多个节点上部署,确保服务的稳定性和可靠性。
本地私有仓库(如Docker Registry)的特点:
简单轻量:直接使用Docker Registry镜像搭建的私有仓库较为简单,资源占用少,适合小型团队或测试环境快速搭建。
基本功能:仅提供基本的镜像存储和拉取功能,不包含用户管理、权限控制等高级功能。适合对安全性和管理要求不高的场景。
配置灵活:虽然缺少预置的图形界面,但是高度可配置,可以根据需要调整存储后端、网络设置等。
维护成本:相对于Harbor,本地私有仓库的维护工作更多依赖手动配置和脚本,对于复杂的企业级需求来说,管理成本可能会增加。
3,Harbor的特性
- 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
- 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
- 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
- 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
- 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
- 审计管理:所有针对镜 像仓库的操作都可以被记录追溯,用于审计管理。
- 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
- Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。
4,Harbor的构成
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。
4.1 Proxy
是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。
4.2 Registry
负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。