docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

2022年11月27日09:54:24web服务器评论188 views字数 3642阅读模式
作者:大刚测试开发实战
来源:知乎

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

一、公共镜像仓库Docker-hub

1.docker-hub简介

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

2.提交镜像到仓库

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

① 创建镜像仓库

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

② Linux命令行登录Docker账号

docker login  # 登录docker-hub

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

④ 提交镜像到公共仓库

docker push chenjigang/auto-test:v1.1

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

⑤ 查看镜像仓库

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

二、私有化镜像仓库Harbor

1.Harbor简介

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

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

gitee地址:gitee.com/project_harbo

2.Harbor搭建

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

① 下载并解压安装包

在线下载:

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的相关配置

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

③ 准备安装环境

./prepare  # 执行prepare脚本

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

④ 安装harbor

./install.sh  # 安装harbor

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

⑤ 访问harbor

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

  • 报错redis容器重复

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor
docker-compose up -d

查看harbor各个容器状态:

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor
  • 报错registry容器重复

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

3.推送本地镜像到Harbor

① 创建项目

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

② Docker登录

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

docker login 192.168.1.122:8087

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

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

如遇以下报错:

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库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"
}

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor
systemctl daemon-reload
systectl restart docker

再次登录后登录成功:

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

③ 本地镜像打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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

④ 推送本地镜像到Harbor

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

⑤ 从Harbor拉取镜像

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

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库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

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

登录MySQL

docker用法整理:Docker-hub公共镜像仓库VS私有化镜像仓库Harbor

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/30204.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定