Docker 使用编译:Dockerhub 公共镜像库 VS 私有镜像库 Harbor
来源:知乎
介绍如何自定义docker镜像、容器或容器。没有提到镜像管理,那么我们是否可以像管理代码一样实现对镜像文件的push和pull操作呢?答案是肯定的。 Docker-hub 是一个公共存储库,您可以在其中搜索他人创建的各种镜像并管理自己的镜像。 Harbor是一个私有的镜像仓库,我们可以在这里上传图片。同一 Intranet 上的其他用户可以在那里下载和使用它。由于部署在自己的服务器上,安全性更有保证。 Docker-hub和Harbor之间的关系可以类比为GitHub和Gitlab。
1。公共镜像存储库 Docker-hub
1。 Docker Hub简介
公共镜像仓库通常由Docker官方或其他第三方组织(阿里云、腾讯云、网易云等)提供,允许所有人注册并使用镜像仓库。 Docker Hub 是全球最大的镜像市场,拥有超过 100,000 个容器镜像。 ![]()
![]()
2。提交镜像到仓库
具体步骤:注册账号>>登录>>创建仓库>>Linux命令行docker登录>>更改镜像名称(与仓库名称保持一致)>>提交镜像到仓库
① 创建镜像仓库
与在github上创建代码仓库类似。它分为两种:公共(公开的,对互联网可见)和私有(受保护的,对自己可见)。 ![]()
![]()
![]()
![]()
② Linux 命令行登录 Docker 帐号
docker login # 登录docker-hub③ 修改镜像名称与镜像仓库一致
docker tag joinsunsoft/docker.ui:latest chenjigang/auto-test:v1.1④ 提交镜像到公共仓库
docker push chenjigang/auto-test:v1.1⑤ 查看镜像仓库
2. 单独的镜像存储库端口
1。 Harbor简介
Harbor是VMware开源的企业级Docker注册表管理项目。它包括权限管理(RBAC)、LDAP、日志审计、管理界面、自注册、镜像复制、中国支持等功能。 。 ![]()
![]()
作为企业级私有注册服务器,Harbor 提供更好的性能和安全性。提高使用注册表创建和运行映像交付环境的用户的效率。Harbor支持安装在多个注册节点上的镜像资源的复制。所有镜像都存储在私有注册表中,以确保对公司内联网内的数据和知识产权的控制。此外,Harbor还提供高级安全功能,例如用户管理、访问控制和活动审核。
- 基于角色的访问控制 - 用户和 Docker 镜像存储库通过“项目”进行组织和管理。一个用户可以对同一命名空间(项目)中的多个镜像存储库拥有不同的权限。
- 镜像复制 – 可以在多个注册表实例之间复制(同步)镜像。特别适合负载均衡、高可用、混合云、多云场景。
- 图形用户界面 - 用户可以浏览浏览器、拉取当前的 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 注册表的 V2,因此 Docker 版本必须至少为 1.10.0,并且 Docker 版本必须至少为 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编辑如下:
- 默认为端口ip❀更改本地ip8.,即可改成别的 设置端口
- 注释相关https配置
③ 准备安装环境
./prepare # 执行prepare脚本 完成后,本地会出现额外的docker-compose.yml文件和共享目录 ![]()
![]()
④ 安装端口
./install.sh # 安装harbor期间安装 端口镜像会自动下载并启动相关容器。
⑤访问端口
安装成功后,可以访问端口:http://192.168.1.122:8087 其中:ip为本地IP,port为harbor.yml配置文件中配置的端口。默认账号和密码为:admin Harbour12345![]()
![]()
密码可在harbour.yml文件中查看或更改![]()
![]()
![]()
![]()
⑥安装过程中常见问题及解决方案
- 错误信息容器重复
:redis容器本地已存在。 Harbor 无法启动 redis 容器
解决方案:更改harbor目录下的 docker-compose.yml 文件中的 redis 容器名称并重新启动 ![]()
![]()
docker-compose up -d检查每个harbor容器的状态:![]()
![]()
- ❙❀复制registry容器时出错。如果本地registry容器已经存在,则port安装过程中会报错。解决办法:删除原来的registry容器,重新运行./install.sh进行安装;如果还是这样报错,则运行docker-compose up -d启动各个服务;
3。将本地镜像推送到端口
① 创建项目


② Docker 登录
由于您之前已经登录过 docker-hub,如果您再次使用“docker login”命令登录,则默认登录为 docker hub。地址。因此,如果要登录某个端口,则在登录时必须指定登录地址。
docker login 192.168.1.122:8087首次登录时,只需根据提示输入端口用户名和密码,与登录用户界面时使用的账号和密码一致。
由于我之前已经登录过这个地址一次,所以认证记录存储在本地,所以当我再次登录时,无需输入用户名和密码就可以成功登录。


如果出现以下错误:


将本地IP(端口不是80时需要端口号)添加到/etc/docker/daemon.json中的不安全寄存器列表中,并重新加载配置。
{ "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重新登录后,登录成功:


③标记本地镜像
镜像名称必须设置为以下名称:ip:端口号/项目名称/镜像名称:标签名称才可以上传到指定项目,例如rabbitmq Mirror,名称为:192.168.1.122:8087/harbor/rabbitmq:5.7.33
为了方便测试,我直接复制了本地的Push镜像并重命名为: ❑ 本地镜像到harbor
docker push 192.168.1.122:8087/harbor/rabbitmq:3.7-management

检查名为harbor、rabbitmq :3.7-management的项目是否存在,测试成功。


⑤ 从端口拉取镜像
- 拉取镜像
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-i in


版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网