【Docker】Docker部署私有仓库的配置及应用

文章目录

  • 一、Docker-registry 搭建本地私有仓库
    • 1. Registry 的概念
    • 2. Registry 的部署过程
  • 二、Docker-harbor 搭建私有仓库
    • 1. 什么是Harbor
    • 2. Harbor 的特性
    • 3. Harbor的构成
    • 4. Harbor 的部署过程
      • 4.1 安装 harbor
      • 4.2 创建项目并进行上传下载
      • 4.3 上传镜像到私有仓库
      • 4.4 从私有仓库下载镜像
      • 4.4 镜像同步
  • 总结
    • docdker 私有仓库操作步骤


一、Docker-registry 搭建本地私有仓库

1. Registry 的概念

  像Dockerhub、阿里云这样的公共镜像仓库有的时候用起来不太方便:Dockerhub网速太慢;阿里云需要花钱买云主机。另外,涉及内部资源的保密性,有的机构不太可能将镜像提供给公网,因此需要创建一个基于内部项目镜像,构造本地私人仓库供给团队使用。

  因此,Docker提供了Dcoker Registry工具,可以用于构建私有镜像仓库。registry用于保存docker镜像,包括镜像的层次结构和元数据。

  启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像。

2. Registry 的部署过程

#首先下载registry镜像
docker pull registry
docker images

在这里插入图片描述

#在daemon.json文件中添加私有镜像仓库地址
vim /etc/docker/daemon.json
{"insecure-registries":["http://192.168.145.15:5000"],			#添加,注意用逗号结尾"registry-mirrors":["https://00ub0bmk.mirror.aliyuncs.com"]
}

在这里插入图片描述

systemctl restart docker			#若重启docker,容器状态不全是up状态,可以执行docker-compose restart
systemctl status docker

在这里插入图片描述

#运行registry容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest 
-------------------------------------------------------------------
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:把宿主机的/data/registry目录绑定到容器/vaz/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always:这是重启的策略,在容器退出时总是重启容器
--name registry:创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像
-------------------------------------------
Docker容器的重启策略如下:
no:默状认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

在这里插入图片描述

#为镜像打标签
docker tag centos:7 192.168.145.15:5000/centos:v1#上传到私有仓库
docker push 192.168.145.15:5000/centos:v1

在这里插入图片描述

#列出私有仓库的所有镜像
curl http://192.168.145.15:5000/v2/_catalog#列出私有仓库的 centos 镜像有哪些标签
curl http://192.168.145.15:5000/v2/centos/tags/list#先删除原有的 centos 的镜像,再测试私有仓库下载
docker rmi -f eeb6ee3f44bd
docker pul1 192.168.145.15:5000/centos:v1

二、Docker-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实例之间进行复制(同步)。
  • 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  • 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  • 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  • Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

3. Harbor的构成

  Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

  • Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。

  • Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。

  • Core services: Harbor的核心功能,主要提供以下3个服务:

  1)UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。2)WebHook:为了及时获取Registry 上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。3)Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。
  • Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

  • Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。

  • Log collector(harbor-log): 负责收集其他组件的日志到一个地方。

  Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。

  总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。

  其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。

4. Harbor 的部署过程

#在daemon.json文件中添加镜像仓库地址
vim /etc/docker/daemon.json
{"insecure-registries": ["http://192.168.145.15:5000","http://192.168.145.15"],"registry-mirrors": ["https://00ub0bmk.mirror.aliyuncs.com"]
}systemctl restart docker

在这里插入图片描述

4.1 安装 harbor

#解压本地harbor压缩包
cd /opt/
ls
tar xf harbor-offline-installer-v1.10.18.tgz

在这里插入图片描述

#修改配置文件
vim /opt/harbor/harbor.yml
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.145.15
# https related config
--11~18行注释掉--
#https:# https port for harbor, default is 443#port: 443# The path of cert and key files for nginx#certificate: /your/certificate/path#private key: /your/private/key/path
--27行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

在这里插入图片描述

#启动harbor
cd /opt/habor/
#在配置好了 harbor.yml 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
./prepare		#再执行命令 ./install.sh 以 pull 镜像并启动容器
./install.sh

在这里插入图片描述

#查看 Harbor 启动镜像
docker-compose ps---------------------------
docker-compose up -d      #启动
docker-compose stop       #停止
docker-compose restart    #重新启动

在这里插入图片描述

#浏览器访问
http://192.168.145.15 
#登录 Harbor WEB UI 界面,默认的管理员用户名和密码
admin/Harbor12345

在这里插入图片描述

4.2 创建项目并进行上传下载

#创建一个新项目
浏览器访问:http://192.168.145.15
输入用户名和密码登录界面后可以创建一个新项目。点击“+新建项目”按钮
填写项目名称为“myproject-test”,点击“确定”按钮,创建新项目

在这里插入图片描述

在这里插入图片描述

4.3 上传镜像到私有仓库

#将镜像打标签
格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag 192.168.145.15:5000/centos:v1 192.168.145.15/myproject-test/centos:v1

在这里插入图片描述

#登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.145.15#上传镜像到 Harbor
docker push 192.168.145.15/myproject-test/centos:v1

#查看仓库镜像
Harbor 界面 myproject-test 目录下可看见此镜像及相关信息

在这里插入图片描述

4.4 从私有仓库下载镜像

#创建用户zhangsan
系统管理 --> 用户管理 --> 创建用户,创建内容如下:用户名   zhangsan
邮箱     zhangsan@test.com
全名     zhangsan
密码     Zhangsan123			#密码需要包含大小写字母和数字
确认密码  Zhangsan123

在这里插入图片描述

#设置zhangsan成员为管理#将zhangsan添加到myproject-test仓库中
项目 --> myproject-test --> 成员 --> '+用户'

在这里插入图片描述

在这里插入图片描述

#在其他的docker上进行下载镜像
vim /etc/docker/daemon.json
{"insecure-registries": ["http://192.168.145.15"],"registry-mirrors": ["https://00ub0bmk.mirror.aliyuncs.com"]
}systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

#登录harbor
docker login -u zhangsan -pZhangsan123 http://192.168.145.15
docker pull 192.168.145.15/myproject-test/centos:v1#查看镜像
docker images
REPOSITORY                             TAG       IMAGE ID       CREATED         SIZE
192.168.145.15/myproject-test/centos   v1        eeb6ee3f44bd   22 months ago   204MB

在这里插入图片描述

4.4 镜像同步

#解压harbor
cd /opt/
tar xf harbor-offline-installer-v1.10.18.tgz
cd harbor/#修改harbor配置文件
vim harbor.yml
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.145.15
# https related config
--11~18行注释掉--
#https:# https port for harbor, default is 443#port: 443# The path of cert and key files for nginx#certificate: /your/certificate/path#private key: /your/private/key/path
--27行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345#启动harbor
./install.sh

在这里插入图片描述

#浏览器访问harbor网页
http://192.168.145.30

在这里插入图片描述

#在之前的harbor网页中操作
系统管理 --> 仓库管理 --> 新键目标 --> 输入相应内容 --> 测试连接 --> 确定提供者  harbor
目标名  192.168.145.30
目标URL http://192.168.145.30
访问ID  admin
访问密码 Harbor12345#在新的harbor网页做同样的操作提供者  harbor
目标名  192.168.145.15
目标URL http://192.168.145.15
访问ID  admin
访问密码 Harbor12345

在这里插入图片描述

#创建仓库推送规则
系统管理 --> 复制管理 --> 新键镜像名称          192.168.145.30
目标Registry  192.168.145.30-http://192.168.145.30
触发模式       事件驱动
勾选“删除本地资源时同时也删除远程的资源。”#注意,如果想要拉取镜像可以在复制模式设置为Pull-based
#触发模式可以修改为定时,可以设置为 0 * * * * *,表示为1分钟拉取一次

在这里插入图片描述

#在192.168.145.15测试推送镜像至192.168.145.15的私有仓库
docker logout															#退出之前登录的用户
docker login -u admin -pHarbor12345 http://192.168.145.15				#登录admin用户进入仓库docker images															#查看镜像,选择任意一个镜像进行推送测试
REPOSITORY                             TAG        IMAGE ID       CREATED         SIZE
goharbor/nginx-photon                  v1.10.18   f34db7d88123   2 months ago    126MBdocker tag goharbor/nginx-photon:v1.10.18 192.168.145.15/library/nginx:test	#给镜像打上标签docker images															#查看打标签的镜像
REPOSITORY                             TAG        IMAGE ID       CREATED         SIZE
192.168.145.15/library/nginx           test       f34db7d88123   2 months ago    126MBdocker push 192.168.145.15/library/nginx:test							#推送镜像

在这里插入图片描述

#浏览器访问
http://192.168.145.30查看library仓库中是否多了镜像

在这里插入图片描述

总结

docdker 私有仓库操作步骤

1)修改docker配置文件 /etc/docer/daemo.json 添加参数"insecure-registries":["私有仓库URL"],重启docker
2)登录私有仓库 docker login [-u 仓库用户 -p 仓库密码] 私有仓库URL
3)添加镜像标签 docker tag 原镜像:标签 私有仓库URL/项目名/镜像:标签
4)推送镜像 docker push 私有仓库URL/项目名/镜像:标签

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue--插槽

一、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分,不希望写死,希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分,改用**…

mysql的主键选择

一.没有定义主键有什么问题 如果定义了主键,那么InnoDB会使用主键作为聚簇索引如果没有定义主键,那么会使用第一非空的唯一索引(NOT NULL and UNIQUE INDEX)作为聚簇索引如果既没有主键也找不到合适的非空索引,那么In…

【数据挖掘】时间序列的傅里叶变换:用numpy解释的快速卷积

一、说明 本篇告诉大家一个高级数学模型,即傅里叶模型的使用; 当今,傅里叶变换及其所有变体构成了我们现代世界的基础,为压缩、通信、图像处理等技术提供了动力。我们从根源上理解,从根本上应用,这是值得付…

STM32MP157驱动开发——按键驱动(线程化处理)

文章目录 “线程化处理”机制:内核函数线程化处理方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “线程化处理”机制: 工作队列是在内核的线程的上下文中执行的 工作队列中有多个 work&#xff0…

Git远程仓库使用方法

目录 介绍 详细教程 1、创建远程仓库 2、在本地初始化仓库 3、关联远程仓库 4、提交代码 5、拉取到本地仓库 6、提交到Git仓库 5、将本地代码推送到远程仓库 介绍 远程仓库在协同开发中起着关键的作用,它提供了一个中央存储库,使多个开发者能够…

Hadoop中HDFS的架构

一、Switch语句 语法规则: ①语句中的变量类型可以是byte、short、int或者char;从javaSE5开始支持枚举类型; javaSE7开始,switch支持String。 ②没有break时,后续case的语句都会执行 二、修饰符 访问修饰符 Java中&#xff0c…

【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)

文章目录 前言一、 整体1.命名空间:2构造函数:1普通构造2迭代器构造3初始化字符构造4拷贝构造: 3析构函数 二、成员函数实现1.大小1当前大小(size())2总体容量(capacity()) 2.返回头尾迭代器1begin()2end()…

小程序如何修改商品

​商家可能会遇到需要修改产品信息的情况。无论是价格调整、库存更新还是商品描述的修改,小程序提供了简便的方式来帮助你们完成这些操作。下面是一些简单的步骤和注意事项,帮助你们顺利地修改商品。 一、进入商品管理页面 在个人中心点击管理入口&…

矿井人员视频行为分析算法 opencv

矿井人员视频行为分析算法通过opencvpython网络模型技术,矿井人员视频行为分析算法实时监测人员的作业行为,并与安全标准进行比对,可以及时发现不符合安全要求的行为,预防事故的发生。OpenCV的全称是Open Source Computer Vision …

教师ChatGPT的23种用法

火爆全网的ChatGPT,作为教师应该如何正确使用?本文梳理了教师ChatGPT的23种用法,一起来看看吧! 1、回答问题 ChatGPT可用于实时回答问题,使其成为需要快速获取信息的学生的有用工具。 从这个意义上说,Cha…

【N32L40X】学习笔记10-外部触发方式计数

定时器采用外部触发方式计数 也就是外部时钟源模式2 此模式由 TIMx_SMCTRL .EXCEN 选择等于 1。计数器可以在外部触发输入 ETR 的每个上升沿或下降沿 计数。 极性选择分频选择过滤选择选择外部时钟ETR模式 bsp_time_counter_ETR.h #ifndef _BSP_TIME_COUNTER_ETR_H_ #defi…

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热,在全球掀起一阵生成式AI(AIGC)热潮。国外的OpenAI、国内的百度等企业,都在AIGC上强力布局。 各种应用场景中,AIGC助力的数字人引起了市场注意。 事实上,数字人不是个新鲜事。早在1…

在Ubuntu 系统下开发GUI,用哪种开发工具比较好?

在Ubuntu系统下开发GUI,你可以考虑使用以下几种开发工具:Qt Creator:Qt Creator是一个跨平台的集成开发环境,专门用于开发基于Qt框架的应用程序。它提供了丰富的图形界面设计工具和代码编辑器,支持C和QML编程。Qt Crea…

UI 自动化稳定性用例实战经验分享!

目录 前言: 大家常说 UI 自动化不稳定,那又如何提高稳定性呢? 操作界面非预期的弹框、广告、浮层 测试系统的 A/B 策略 总结: 前言: 稳定性测试是软件测试的一个重要方面,它旨在评估软件在不同负载和…

一起学SF框架系列5.8-spring-Beans-注解bean解析4-bean解析

前面三节主要讲了如何加载注解Bean的BeanDefinition,执行环节是在DefaultBeanDefinitionDocumentReader.parseBeanDefinitions中用BeanDefinitionParserDelegate.parseCustomElement(ele)加载的,实际上没对注解真正进行解析。本节主要讲述注解bean如何被…

Mysql关于进程中的死锁和解除锁

Mysql 经常会遇到语句或者存储过程长时间没有反应,大概率就是挂掉了,或者死锁了。 可通过如下几种方式来查看当前进程状态 1. 查询数据库所有的进程状态 SHOW PROCESSLIST SELECT * FROM information_schema.PROCESSLIST; 2. 查询在锁的事务 SELECT…

opencv 图像腐蚀膨胀 erode dilate

#include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dstbin, distancetransform,rel, rel2;img imread("m3.jpg");//转为灰度图cvtColor(img, dst, COLOR_BGR2GRAY);//二…

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API(第一章)从Vue2到Vue3【二】Composition API(第二章)从Vue2到Vue3【三】Composition API(第三章)从Vue2到Vue3【四】C…

网络通信原理(第十八课)

网络通信原理(第十八课) 4.1 回顾 1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网…

10分钟内入门 ArcGIS Pro

本文来源:GIS荟 大家好,这篇文章大概会花费你10分钟的时间,带你入门 ArcGIS Pro 的使用,不过前提是你有 ArcMap 使用经验。 我将从工程文件组织方式、软件界面、常用功能、编辑器、制图这5个维度给大家介绍。 演示使用的 ArcGI…