Docker从入门到实战系列之Dockerhub&私有化仓库Harbor搭建及使用

Docker从入门到实战系列之Dockerhub&私有化仓库Harbor搭建及使用

作者:大刚测试开发实战 2023-03-30 07:35:55

云计算

云原生 Harbor是一款私有化镜像仓库,我们可以把镜像上传上去,同一内网下的其他用户均可以下载使用,因为是部署在自己的服务器,因此对于安全性这方面更有保障。docker-hub和Harbor的关系我们可以类比成GitHub和Gitlab。

前言

在前面的文章中,我们介绍了如何定制镜像、容器编排,但仿佛对镜像管理并没有提及,那么镜像文件我们是否可以像管理代码一样实现push、pull的操作呢?答案是有的,docker-hub就是一款公共仓库,在上面可以搜索到别人创建好的各种各样的镜像,以及管理自己的镜像;Harbor是一款私有化镜像仓库,我们可以把镜像上传上去,同一内网下的其他用户均可以下载使用,因为是部署在自己的服务器,因此对于安全性这方面更有保障。docker-hub和Harbor的关系我们可以类比成GitHub和Gitlab。

一、公共镜像仓库Docker-hub

1.docker-hub简介

公共镜像仓库一般是 Docker 官方或者其他第三方组织(阿里云,腾讯云,网易云等)提供的,允许所有人注册和使用的镜像仓库。Docker Hub 是全球最大的镜像市场,目前已经有超过 10w 个容器镜像。

2.提交镜像到仓库

具体步骤注册账号>>登录>>创建仓库>>>linux命令行docker登录>>修改镜像名称(保持与仓库名称一致)>>提交镜像到仓库

① 创建镜像仓库

类似于github上创建代码仓库,分为public(公开的,互联网可见)和private(受保护的,仅自己可见)两种。

② Linux命令行登录Docker账号

docker login  # 登录docker-hub

③ 修改镜像名称,保持与镜像仓库一致

docker tag joinsunsoft/docker.ui:latest chenjigang/auto-test:v1.1

④ 提交镜像到公共仓库

docker push chenjigang/auto-test:v1.1

⑤ 查看镜像仓库

二、私有化镜像仓库Harbor

1.Harbor简介

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

  • 基于角色的访问控制 – 用户与 Docker 镜像仓库通过 “项目” 进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 – 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 – 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 – Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
  • 审计管理 – 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 – 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API – RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易。
  • 部署简单 – 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台 (OVA 方式) 虚拟设备。

gitee地址:​​https://gitee.com/project_harbor/harbor?utm_source=alading&utm_campaign=repo​​

2.Harbor搭建

安装说明: Harbor的所有服务组件都是在Docker中部署的,所以官方安装使用Docker-compose快速部署,所以需要安装 Docker、Docker-compose。由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0, Docker-compose版本不小于1.6.0。

① 下载并解压安装包

在线下载:

wget https://github.com/goharbor/harbor/releases/download/v2.2.2/harbor-online-installer-v2.2.2.tgz
tar -xvf harbor-online-installer-v2.2.2.tgz

② 编辑配置文件

cp harbor.yml.tmpl harbor.yml  # 复制一份harbor.yml文件
vi harbor.yml

按照如下内容编辑:

  • hostname改为本机ip
  • 端口默认80,可以改为其他指定端口
  • 注释掉https的相关配置

③ 准备安装环境

./prepare  # 执行prepare脚本

执行完成后,本地会多一个docker-compose.yml文件和common目录

④ 安装harbor

./install.sh  # 安装harbor

安装过程中会自动下载harbor镜像并启动相关容器。

⑤ 访问harbor

安装成功后,即可访问harbor:http://192.168.1.122:8087,其中:ip为本机ip,端口为配置文件harbor.yml中配置的端口。默认账号和密码为:admin Harbor12345

harbor.yml文件中可查看或修改密码

⑥ 安装过程中常见问题及解决

  • 报错redis容器重复

原因:本地已存在redis容器,harbor无法启动redis容器

解决办法:修改harbor目录下docker-compose.yml中的redis容器名称,重新启动

docker-compose up -d

查看harbor各个容器状态:

  • 报错registry容器重复

若本地之前已存在registry容器时,harbor安装过程会报错,解决方案:删除原registry容器,重新执行./install.sh进行安装;若此方式仍报错,则执行docker-compose up -d启动各个服务;

3.推送本地镜像到Harbor

① 创建项目

② Docker登录

由于之前登录过docker-hub,所以再次使用“docker login”命令登录时,默认登录的还是docker-hub的地址。因此,如果想要登录harbor,需要在登录时指定登录地址。

docker login http://192.168.1.122:8087

首次登录,根据提示输入harbor用户名及密码即可,与前端登录使用的账号密码一致。

由于我前面登录过一次这个地址,本地会保存认证记录,因此再次登录时无需输入用户名密码即可登录成功。

如遇以下报错:

则要在/etc/docker/daemon.json文件中将本机ip(端口非80时需要带上端口号)加入到insecure-registries列表中,并重载配置。

{
"registry-mirrors":[
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"http://cr.console.aliyun.com/",
"https://8wb4g36l.mirror.aliyuncs.com"
],
"insecure-registries":["192.168.1.122:8087"],
"graph":"/home/docker_home"
}

systemctl daemon-reload
systectl restart docker

再次登录后登录成功:

③ 本地镜像打tag

镜像名称需要命名为:ip:端口号/项目名称/镜像名:tag名,才能上传到该指定项目下,例如rabbitmq镜像,则名称为:
192.168.1.122:8087/harbor/rabbitmq:5.7.33

为了方便测试,我直接复制本地的一个镜像,并重新命名:

docker tag rabbitmq:3.7-management 192.168.1.122:8087/harbor/rabbitmq:3.7-management

④ 推送本地镜像到Harbor

docker push 192.168.1.122:8087/harbor/rabbitmq:3.7-management

查看名为harbor的项目下,存在rabbitmq:3.7-management,测试成功。

⑤ 从Harbor拉取镜像

  • 拉取镜像
docker pull 192.168.1.122:8087/library/mysql:5.7.33

从下图可以看出,MySQL镜像已经拉取成功

同时,Harbor管理端也能看到最新的拉取时间:

  • 基于拉取的镜像创建容器
docker run -it -d -e MYSQL_ROOT_PASSWORD=123456--name=mysql -p 3307:3306 192.168.1.122:8087/library/mysql:5.7.33

进入MySQL容器,登录MySQL

至此,即完成了”登录harbor后台>>创建仓库>>>docker命令行登录harbor>>修改镜像名称(保持与仓库名称一致)>>提交镜像到仓库>>拉取镜像>>基于拉取的镜像创建容器>>查看容器”这一系列完整的操作。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/306397.html<

(0)
管理的头像管理
上一篇2025-05-26 15:34
下一篇 2025-05-26 15:36

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注