Docker部署私有仓库(registryHarbor)

简介
Docker Hub 官方仓库
在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目push到公有仓库进行管理。所以为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。

仓库(Repository)
一个容易混淆的概念是注册服务器(registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址docker.sina.com.cn/centos:centos7来说,docekr.sian.com.cn是注册服务器地址,centos是仓库名,centos7是仓库的tag(标签)。

部署registry
(1) 拉取registry私有库镜像
Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

docker pull registry:2

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

参数解析

-d:后台运行
-p:将容器的5000端口映射到宿主机的5000端口
–restart:docker服务重启后总是重启此容器
–name:容器的名称
-v = --volume:数据卷,进行一个挂载宿主机:容器内。将容器的/var/lib/registry映射到宿主机的 /opt/registry目录

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

执行命令 curl 172.16.1.30:5000/v2/_catalog,收到的响应如下,是个json对象,其中repositories对应的值是空的json数组,表示目前仓库里还没有镜像:

curl 172.16.1.30:5000/v2/_catalog
{"repositories":[]}

(2) 支持http协议推送
正常情况下,应用服务器推送镜像到仓库用的是https,此处我们通过命令行来测试推送用的是普通的http,所以需要在客户端配置一下私有仓库的可信任设置让我们可以通过HTTP直接访问:

两种方法

修改/usr/lib/systemd/system/docker.service文件

或在/etc/docker/daemon.json 文件中添加以下内容

~]# cat /etc/docker/daemon.json
{ "insecure-registries":["192.168.50.11"] }

PS:如果不设置可信任源,又没有配置HTTPS证书,那么会遇到这个错误:error: Get https://ip:port/v1/_ping: http: server gave HTTP response to HTTPS client.

重新加载进程并重启docker服务:

systemctl daemon-reload
systemctl restart docker

(3)将本地镜像push到私有仓库中
如果不对私有仓库命名的话,默认走的是公共仓库(docker hub),所以需要命名镜像。

私有仓库镜像的命名规则:宿主机ip地址:端口号/xxxx(需要更改的名称)

以nignx镜像为例,下载nginx镜像:

docker pull nginx
docker tag  nginx:latest 172.16.1.30:5000/nginx:latest

注意:当你对源镜像(nginx:latest)进行命名后,命名后的镜像名称也视为一个标签,因为id号是相同的。如果当源镜像(nginx:latest)删除,命名后的镜像依然会存在,因为删除的是一个标签。

docker push 172.16.1.30:5000/nginx:latest

查看私有仓库中的镜像

curl 172.16.1.30:5000/v2/_catalog
{"repositories":["nginx"]}

查看仓库中镜像的标签

curl 172.16.1.30:5000/v2/nginx/tags/list
{"name":"nginx","tags":["latest"]}

如果需要删除私有仓库中的镜像,有一个简单的方法在运行registry时挂载在本地的目录[/opt/registry]中,找到指定的镜像存放的目录来进行删除。

cd /opt/registry
ls
blobs  repositories
cd repositories/
ls
nginx
rm -rf nginx/


删除后再次查看私有仓库中的镜像是否还存在:

curl http://172.16.1.30:5000/v2/_catalog
{"repositories":[]}

(4) 从私有仓库中拉取镜像
docker pull 172.16.1.30:5000/nginx #使用pull命令进行拉取

如果要在其它机器拉取镜像的话,记得修改/usr/lib/systemd/system/docker.service文件。

部署Harbor
docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。

(1)安装compose
yum install docker-compose

部署harbor依赖这个东西

(2)下载harbor安装包并进行解压
下载地址:https://github.com/goharbor/harbor/releases

wget https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-offline-installer-v1.10.2.tgz
tar zxf harbor-offline-installer-v1.10.2.tgz -C /usr/local/
cd /usr/local/harbor/

(3) 编写harbor配置文件
配置参数位于安装目录的 harbor.yml 文件中。

必须参数

hostname: 目标主机的主机名。它应该是目标计算机的 IP 地址或完全限定的域名(FQDN),例如:172.16.1.30 或 reg.yourdomain.com。不要使用 localhost 或 127.0.0.1 作为主机名。
data_volume: Harbor 数据的存储位置
harbor_admin_password: 管理员的初始密码。此密码仅在 Harbor 首次启动时生效。请注意,默认用户 名/密码为 admin / Harbor12345
database: 与本地数据库相关的配置。
password: 默认数据库密码为 root123,应该改为一个安全的生产环境密码。
可选参数

http:
port: 你的 http 的端口号。

https: 启用 https 协议。如果启用了秘钥,则必须设置为 https。
port: https 的端口号。
certificate: SSL 证书的路径,仅在协议设置为 https 时应用。
private_key: SSL 密钥的路径,仅在协议设置为 https 时应用。

(4)启动Harbor
 ./install.sh

由于 Harbor 也是由一组容器构成,包括 redis、nginx等,安装过程会下载很多镜像,并启动很多容器,等脚本执行完后,看到提示这面这样就说明安装完毕了。

 ✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://172.16.1.30.
For more details, please visit https://github.com/goharbor/harbor .

(5) 注册和创建仓库
访问 http://172.16.1.30 就看到登录界面了。(用户admin,密码:Harbor12345(在harbor配置文件中可以查看到)

新建项目

在项目中创建一个新的公开镜像仓库 testproject。

点击推送镜像,可以看到推送到此仓库的格式。

(6)推送镜像
我们使用此格式,从另一台机器推送镜像。
docker tag SOURCE_IMAGE[:TAG] 172.16.1.30/testproject/IMAGE[:TAG]
docker push 172.16.1.30/testproject/IMAGE[:TAG]
在本地终端上连接harbor:
docker login  172.16.1.30:80

因为默认走https所以不指定端口将默认443
将需要上传到harbor私有仓库的镜像进行push:
docker tag nginx:latest 172.16.1.30:80/testproject/nginx:latest  #更改标签
docker push 172.16.1.30:80/testproject/nginx:latest #push到刚才在网页上创建的项目

push推送的时候,也要记得加上端口。
然后在 Harbor web 控制台中已经可以看到刚才上传的镜像了,私有本地仓库就创建好了,后期我们可以使用 admin 账户来管理。
并且在生产环境中,建议加入证书,使用 https 协议通信,为了防止单点故障,可以使用分布式存储如 Ceph 作为后端存储。
迁移Docker仓库
采用registry部署的迁移方法
大概流程就是导出registry镜像,在新的机器导入,然后把镜像文件放到相同的目录下,启动就可以了。
采用Harbor部署的迁移方法
编写脚本把镜像重新上传到Harbor
切换镜像仓库
不管以上如何实现,但切换镜像仓库的方法大致相同。在测试没问题的前提下,执行以下流程:
1、如果选择registry,则只需要把原来registry仓库的镜像文件,直接复制到新的registry仓库的目录下。如过选用Harbor,则需要编写脚本把原来镜像仓库的镜像同步过去。
2、编写shell脚本通过ansible更新所有要与Registry交互的Docker主机。如果选择Insecure Registry需要更改所有 Docker主机的Docker Daemon。如果选择Secure Registry则是颁发证书。
3、通知新镜像仓库的地址,避免push、pull失败。
sudo docker run -d -p 5000:5000 --restart=always --name registry -v /app_data/registry/:/var/lib/registry registry:2

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

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

相关文章

并查集 Rank 的优化

并查集 Rank 的优化 并查集是一种数据结构,用于处理一些不交集的合并及查询问题。它支持两种操作:查找(Find)和合并(Union)。查找操作用于确定某个元素属于哪个子集,而合并操作用于将两个子集合并成一个集合。在并查集中,每个子集用一棵树来表示,树根的元素作为该子集…

讲座学习截图——《CAD/CAE/CAM几何引擎-软件概述》(一)

目录 引出CAD/CAE/CAM几何引擎-软件概述 郝建兵CADCAECAM 几何模型内核ACIS 两个老大之一Open CascadeParasolid 两个老大之一Autodesk的内核 总结其他自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式…

每天一个数据分析题(三百八十四)- 回归与分类

关于回归与分类问题的讨论不正确的是: A. 回归问题的目标变量通常是连续的数值变量,而分类问题的目标变量通常是离散的分类变量 B. 回归问题和分类问题同属于有监督学习范畴 C. 回归问题最常用的评价指标体系有混淆矩阵以及ROC曲线 D. 回归问题的常见…

02_RISC-V RTOS系统移植及启动

系统移植: https://so.csdn.net/so/search?spm1001.2100.3001.4498&qRISCV%E7%A7%BB%E6%A4%8DRT-Thread&t&uRT-thread移植指南-RISC-V:https://blog.csdn.net/ty1121466568/article/details/120455709riscv cpu 移植 rt-thread 需要考虑的…

C/C++ 类型转换

char* 转 string const char *name "hello"; String Str name;Serial.printf("%s\n", Str); string 转 char* String str "hello"; char *p (char *)str.c_str();Serial.printf("%s\n", p); char *转 char[] const char *str …

设置Nginx缓存策略

详细信息 Nginx服务器的缓存策略设置方法有两种:add_header或者expires。 1. add_header 1)语法:add_header name value。 2)默认值:none。 3)使用范围:http、server、location。 配置示例…

双目相机测距原理

一、普通双目相机测距原理 普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下: 如图所示,P点为相应的物体位置,CL和C…

【等保】网络安全等级保护(等保2.0PPT)

等保2.0(网络安全等级保护基本要求的第二代标准)的推出和实施,是基于多方面的考虑和需求。以下是实施等保2.0的主要原因: 加强网络安全保护: 随着网络技术的不断发展和网络威胁的不断增加,传统的网络安全保…

2024年广西三支一扶报名详细流程(附报名照处理流程)​

2024年广西将招募1650名高校毕业生到基层从事支农、支医、支教和帮扶乡村振兴工作(简称“三支一扶”)。 招募对象为全日制普通高校应届及择业期内2022年至2024年毕业的全日制普通高校毕业生。 ➡️招募条件。 1.具有全日制大专(含高职高专&am…

B端系统:配置页面如何设计,这可是用户体验的关键的关键。

提升配置页面体验的十大原则 设计B端系统的配置页面时,用户体验确实是非常关键的。以下是一些设计原则和建议,可以帮助提高配置页面的用户体验: 简洁明了:配置页面应该尽量简洁明了,避免过多的复杂选项和信息。使用清…

【代码阅读】SSC:Semantic Scan Context for Large-Scale Place Recognition

一、主函数 官方开源的代码提供了四个主函数,其中eval_pair.cpp和eval_top1.cpp是一组,分别用于计算两帧的相似度分数以及一帧点云在所有的51帧点云中相似度最高的25帧的相似度分数。eval_seq.cpp是在eval_top1.cpp的基础上,给了一堆序列&am…

PointPillars安装

PointPillars使⽤Pillar Feature Net (PFN)将原始点云数据转换为伪图像(pseudo-image)。 以KITTI的激光 雷达坐标系为例,若输入点云的截取范围[x_min, y_min, z_min, x_max, y_max, z_max]为[0, -39.68, -3, 69.12, 39.68, 1], 且每个pillar…

暑期工作闭坑指南

**暑期工作闭坑指南** 随着暑期的到来,许多学生都会选择利用这段时间进行实习或兼职工作,以增加实践经验、提升个人能力,并赚取一定的收入。然而,在寻找暑期工作时,往往会遇到一些陷阱和风险。为了帮助大家避开这些坑…

must be built with the ios 17 sdk or later,included in Xcode 15 or later.

2024.4.29 号开始,苹果又开始搞开发者了。 Xcode - 支持 - Apple Developer xcode可以从这里下载, Sign In - Apple 电脑不支持,头疼,必须 macOS Ventura 13.5 或以上才能支持。 电脑哪里搞,再买一台吗? 用…

图解布隆过滤器(Bloom Filter)

布隆过滤器详解 布隆过滤器(Bloom Filter)是一种空间效率非常高的随机数据结构,由布隆(Burton Howard Bloom)在1970年提出,用于检验一个元素是否属于一个集合。 具体来说,它可能会错误地认为一个…

java读取txt,doc,docx文档格式的文本内容

读取txt,doc,docx文档格式的文本内容,通过不同格式,读取逻辑不同,避免造成文本内容乱码问题, 这里需要安装Maven: 版本最好统一 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</v…

Jmeter插件管理器,websocket协议,Jmeter连接数据库,测试报告的查看

目录 1、Jmeter插件管理器 1、Jmeter插件管理器用处&#xff1a;Jmeter发展并产生大量优秀的插件&#xff0c;比如取样器、性能监控的插件工具等。但要安装这些优秀的插件&#xff0c;需要先安装插件管理器。 2、插件的下载&#xff0c;从Availabale Plugins中选择&#xff…

day 65 图论part02 99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积

99.岛屿数量 深搜 每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 本题思路&#xff0c;是用遇到一个没有遍历过的节点陆地&#xff0c;计数器就加一&#xff0c;然后把该节点陆地所能遍历到的陆地都标记上。 在遇到标记过的陆地节点和海洋节点的时候直接跳过…

Vue3 响应式 reactive全家桶

reactive()与ref()的区别和连续 ref和reactive都是把变量变成响应式对象 reactive底层使用了泛型约束&#xff0c;只能对引用类型使用。 而ref支持所有的类型&#xff0c;ref取值和赋值都需要 .value 而reactive 不需要 对象 <template><div><form><…

【运维】在 Docker 容器中指定 UTF-8 编码:方法与技巧

在 Docker 容器中指定 UTF-8 编码&#xff1a;方法与技巧 在日常开发中&#xff0c;我们常常需要确保应用程序能正确处理各种字符编码&#xff0c;尤其是 UTF-8 编码。在 Docker 容器中运行应用程序时&#xff0c;正确设置字符编码尤为重要&#xff0c;因为容器通常是跨平台、…