当前位置: 首页 > news >正文

【Docker】Docker学习⑧ - Docker仓库之分布式Harbor

【Docker】Docker学习⑧ - Docker仓库之分布式Harbor

  • 一、Docker简介
  • 二、Docker安装及基础命令介绍
  • 三、Docker镜像管理
  • 四、Docker镜像与制作
  • 五、Docker数据管理
  • 六、网络部分
  • 七、Docker仓库之单机Dokcer Registry
  • 八、 Docker仓库之分布式Harbor
    • 1 Harbor功能官方介绍
    • 2 安装Harbor
    • 3 配置Harbor
      • 3.1 解压并编辑harbor.cfg
      • 3.2 更新harbor配置
      • 3.3 官方方式启动Harbor
    • 4 配置docker使用harbor仓库上传下载镜像
      • 4.1 编辑docker配置文件
      • 4.2 重启docker服务
      • 4.3 验证能否登录harbor
      • 4.4 测试上传和下载镜像
      • 4.5 验证从harbor服务器下载镜像并启动容器
    • 5 实现harbor高可用
    • 6 实现harbor双向同步
    • 7 harbor https配置
  • 九、单机编排之Docker Compose

一、Docker简介

  • 参考:【Docker】Dokcer学习① - 简介

二、Docker安装及基础命令介绍

  • 参考:【Docker】Docker学习② - Docker安装及基础命令介绍

三、Docker镜像管理

  • 参考:【Docker】Docker学习③ - Docker镜像管理

四、Docker镜像与制作

  • 参考:【Docker】Docker学习④ - Docker镜像与制作

五、Docker数据管理

  • 参考:【Docker】Docker学习⑤ - Docker数据管理

六、网络部分

  • 参考:【Docker】Docker学习⑥ - 网络部分

七、Docker仓库之单机Dokcer Registry

  • 参考:【Docker】Docker学习⑦ - Docker仓库之单机Dokcer Registry

八、 Docker仓库之分布式Harbor

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由vmware开源,其通过添加一些企业必需的功能特性,例如:安全、标识和管理等,扩展了开源Docker Distribution。

  • 作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。

  • Harbor支持安装再多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。

  • 另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

    官网地址: https://vmware.github.io/harbor/cn/
    官方github地址:https://github.com/vmware/harbor/

1 Harbor功能官方介绍

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

2 安装Harbor

下载地址:https://github.com/vmware/harbor/releases
安装文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

  • 2.1 服务器1安装docker
  • 2.2 服务器2安装docker
  • 2.3 下载Harbor安装包
    推荐离线完整安装包:
	cd /usr/local/src/wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-offline-installer-v1.2.2.tgz在线安装包:wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-online-installer-v1.2.2.tgz

3 配置Harbor

3.1 解压并编辑harbor.cfg

	tar xvf harbor-offline-installer-v1.2.2.tgzln -sv /usr/local/src/harbor /usr/local/cd /usr/local/harborgrep "^[a-Z]" harbor.cfg

3.2 更新harbor配置

  • 3.2.1 首次部署harbor更新
	cd /usr/local/harbor./prepare  #更新配置执行完后会在当前目录生成一个docker-compose.yml文件,用于配置数据目录等配置信息。
  • 3.2.2 后期修改配置
    如果harbor运行一段时间之后需要更改配置,则步骤如下:
    停止harbor:
	cd /usr/local/harbor docker-compose stopvim harbor.cfg./preparedocker-compose start

3.3 官方方式启动Harbor

  • 3.3.1 官方方式安装并启动harbor
	yum install python-pippip install --upgrade pippip install docker-compose./install.sh #官方构建harbor和启动方式,推荐此方法,会下载官方的docker镜像

4 配置docker使用harbor仓库上传下载镜像

4.1 编辑docker配置文件

如果配置的是https的话,本地docker就不需要有任何操作就可以访问harbor了

	vim /etc/sysconfig/dockerOPTIONS='--selinux-enabled --log-driver=journald --insecure-registry 192.168.56.199'

❗↑可能是版本不对,无效
❗↓可行

	[root@gbase8c_private harbor]# cat /etc/docker/daemon.json{"insecure-registries":["192.168.56.199"],"registry-mirrors":["https://pkjijpqo.mirror.aliyuncs.com"]}#其中192.168.56.199是我们部署harbor的地址,即hostname配置项值,配置完后需要重启docker服务

4.2 重启docker服务

4.3 验证能否登录harbor

docker login 192.168.56.199
日志:

	[root@gbase8c_private harbor]# docker login 192.168.56.199Username: adminPassword: Login Succeeded

4.4 测试上传和下载镜像

  • 4.4.1 导入镜像
	docker load < /opt/nginx-1.10.3_docker.tar.gz
  • 4.4.2 验证镜像导入成功

  • 4.4.3 镜像打tag
    修改images的名称,不修改成指定格式无法将镜像上传到harbor仓库,格式为:harborIP/项目名/image 名字:版本号

	docker tag 192.168.56.199:5000/jack/nginx_1.10.3:v1 192.168.56.199/nginx/nginx_1.10.3:v1docker images

日志:

	[root@gbase8c_private harbor]# docker imagesREPOSITORY                  TAG                 IMAGE ID            CREATED             SIZEnginx                       latest              605c77e624dd        23 months ago       141MB[root@gbase8c_private harbor]# docker tag nginx:latest 192.168.56.199/nginx/nginx:v1[root@gbase8c_private harbor]# docker imagesREPOSITORY                  TAG                 IMAGE ID            CREATED             SIZEnginx                        latest              605c77e624dd        23 months ago       141MB192.168.56.199/nginx/nginx   v1                  605c77e624dd        23 months ago       141MB
  • 4.4.4 在harbor管理界面创建项目

  • 4.4.5 将镜像push到harbor
    格式为:docker push 镜像名:版本

	docker push 192.168.56.199/nginx/nginx_1.10.3:v1

日志:

	[root@gbase8c_private harbor]# docker push 192.168.56.199/nginx/nginx:v1The push refers to repository [192.168.56.199/nginx/nginx]d874fd2bc83b: Pushed 32ce5f6a5106: Pushed f1db227348d0: Pushed b8d6e692a25e: Pushed e379e8aedd4d: Pushed 2edcec3590a4: Pushed v1: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
  • 4.4.6 harbor界面验证镜像上传成功

  • 4.4.7 验证镜像信息

4.5 验证从harbor服务器下载镜像并启动容器

  • 4.5.1 更改docker配置文件
    目前凡是需要从harbor镜像服务器下载image的docker服务都需要更改,不更改的话无法下载
	vim /etc/sysconfig/docker4 OPTIONS='--selinux-enabled --log-driver=journald --insecure-registry 192.168.56.199'
  • 4.5.2 重启docker服务
  • 4.5.3 验证从harbor下载镜像
  • 4.5.3.1 查看下载命令
    harbor上的每个镜像里面自带pull 命令
  • 4.5.3.2 执行下载
	docker pull

日志:

	[root@gbase8c_1 ~]# docker pull 192.168.56.199/nginx/nginx:v1v1: Pulling from nginx/nginxa2abf6c4d29d: Pull complete a9edb18cadd1: Pull complete 589b7251471a: Pull complete 186b1aaa4aa6: Pull complete b4df32aa5a72: Pull complete a0bcbecc962e: Pull complete Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3Status: Downloaded newer image for 192.168.56.199/nginx/nginx:v1192.168.56.199/nginx/nginx:v1[root@gbase8c_1 ~]# docker imagesREPOSITORY                   TAG       IMAGE ID       CREATED         SIZE192.168.56.199/nginx/nginx   v1        605c77e624dd   23 months ago   141MB
  • 4.5.3.3 验证镜像下载完成
  • 4.5.3.4 启动容器
	docker run -d -p 80:80 -p 443:443 
  • 4.5.3.5 验证端口
	[root@gbase8c_1 ~]# docker run -d -p 80:80 -p 443:443 192.168.56.199/nginx/nginx:v1fd35d375abede25eb4ce538b353218ea5b3041ad2c046ce8f75ddef05d182ae5[root@gbase8c_1 ~]# ss -tnlState      Recv-Q Send-Q  Local Address:Port Peer Address:Port              LISTEN     0      128              [::]:443          [::]:*                  LISTEN     0      128              [::]:80           [::]:*  

5 实现harbor高可用

Harbor支持基于策略的Docker镜像复制功能,这类似于MySQL的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作。
已经有很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制的案例,本文将实现单项复制的部署。

  • 5.1 新部署一台harbor服务器
  • 5.2 验证登录
  • 5.3 创建一个nginx项目
    与主harbor项目名称保持一致
  • 5.4 在主harbor服务器配置同步测试
  • 5.5 点击复制规则
  • 5.6 主harbor查看镜像同步状态
  • 5.6 从harbor查看镜像
  • 5.7 测试从harbor镜像下载和容器启动

6 实现harbor双向同步

在从harbor也配置同步规则

7 harbor https配置

	openssl genrsa -out /usr/local/src/harbor/certs/harbor-ca.key 2048openssl req -x509 -new -nodes -key /usr/local/src/harbor/certs/harbor-ca.key -subj "/CN=harbor.magedu.net" -days 7120 -out /usr/local/src/harbor/certs/harbor-ca.crt

日志:

	[root@gbase8c_1 harbor]# openssl genrsa -out /usr/local/src/harbor/certs/harbor-ca.key 2048Generating RSA private key, 2048 bit long modulus...................................................+++.................................................+++e is 65537 (0x10001)[root@gbase8c_1 certs]# openssl req -x509 -new -nodes -key /usr/local/src/harbor/certs/harbor-ca.key -subj "/CN=harbor.magedu.net" -days 7120 -out /usr/local/src/harbor/certs/harbor-ca.crt

九、单机编排之Docker Compose

  • 参考:【Docker】Docker学习⑨ - 单机编排之Docker Compose

相关文章:

  • C语言常见面试题:什么是枚举,枚举的作用是什么?
  • [NISACTF 2022]sign-ezc++
  • 解析dapp:铸造虚拟钱包新概念
  • SpringBoot自定义全局异常处理器
  • 基础算法--搜索与图论(2)
  • 盘古信息IMS OS 数垒制造操作系统+ 产品及生态部正式营运
  • 黑马程序员-瑞吉外卖-day5
  • SpringBoot中从HikariCP迁移到Oracle UCP指南
  • STM32 PWM驱动设计
  • OJ_阶乘的和
  • 【重点问题】攻击面发现及管理
  • SpringBoot 整合RabbitMQ 之延迟队列实验
  • Jenkins上跑自动化项目,case出现错误时,导致项目运行时间过长,该如何处理?
  • diffusion 和 gan 的优缺点对比
  • Python系列(9)—— 比较运算符
  • ES6语法详解(一)
  • Fabric架构演变之路
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • KMP算法及优化
  • Web标准制定过程
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 基于 Babel 的 npm 包最小化设置
  • 基于组件的设计工作流与界面抽象
  • 力扣(LeetCode)965
  • 每天10道Java面试题,跟我走,offer有!
  • 说说动画卡顿的解决方案
  • 小程序01:wepy框架整合iview webapp UI
  • 由插件封装引出的一丢丢思考
  • ​批处理文件中的errorlevel用法
  • # centos7下FFmpeg环境部署记录
  • #vue3 实现前端下载excel文件模板功能
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)80c52学习之旅-起始篇
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .cfg\.dat\.mak(持续补充)
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET CLR Hosting 简介
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net6 webapi log4net完整配置使用流程
  • .NET连接MongoDB数据库实例教程
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • .py文件应该怎样打开?
  • /etc/shadow字段详解
  • @EventListener注解使用说明
  • []T 还是 []*T, 这是一个问题
  • [acm算法学习] 后缀数组SA
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Android] 修改设备访问权限
  • [BIZ] - 1.金融交易系统特点
  • [bug总结]: Feign调用GET请求找不到请求体实体类