Docker部署私有仓库(registryHarbor)

news2024/11/16 6:03:27

简介
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.coloradmin.cn/o/1859531.html

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

相关文章

【机器学习项目实战(二)】基于朴素贝叶斯的中文垃圾短信分类

完整代码、数据集和相应的报告 链接已经放在了正文最下方, 供大家参考学习 摘要 ​ 本文探讨了中文垃圾短信分类的问题,通过收集实际数据集,运用多种机器学习算法进行分类,并对比了不同算法在垃圾短信分类任务上的性能。本研究旨在提高中文垃圾短信的识别准确率,为构建更…

【KMP 滚动哈希】1392. 最长快乐前缀

本文涉及知识点 KMP 滚动哈希 LeetCode1392. 最长快乐前缀 「快乐前缀」 是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。 给你一个字符串 s,请你返回它的 最长快乐前缀。如果不存在满足题意的前缀,则返回…

改装的电荷泵从数字信号中提取能量

本设计理念中描述的倍压器是 Dickson 电荷泵的改进版。与该电路不同,它不需要直流输入电压,而只需要一个数字时钟,其峰值理想情况下在输出端加倍为直流电压。 图 1 倍压器产生自己的局部 V 该电路用作电荷泵,其中 C1 充电至输入时…

Android笔记-adb keycode大全

使用方法 用adb发送按键事件时,可以使用下面表中的枚举值或者直接使用数值,比如 adb shell input keyevent KEYCODE_HOME 或者 adb shell input keyevent 3 下面按三种排序方法列出所有按键的 keycode, 分别是: 按功能分 按枚…

【实用软件】Paragon NTFS for Mac 15下载及安装教程

​习惯上来说所有操作只需轻轻一点:轻量级的快捷菜单栏,可访问所有NTFS驱动器并执行最常见的卷操作,如挂载,卸载和验证,从菜单栏中快速启动NTFS for Mac界面,一键点击,更加方便。11510182322410…

昇思25天学习打卡营第01天|基本介绍快速入门

一、什么是昇思MindSpore? 昇思MindSpore是一个全场景深度学习框架,详见基本介绍 那什么是深度学习呢? 深度学习是一种特殊的机器学习,主要是利用了多层神经网络模拟人脑,自动提取特征并进行预测。 什么是机器学习…

【Python机器学习】凝聚聚类——层次聚类与树状图

凝聚聚类生成了所谓的层次聚类。聚类过程迭代进行,每个点都从一个单点簇变为属于最终的某个簇。每个中间步骤都提供了数据的一种聚类(簇的个数也不相同)。有时候,同时查看所有可能的聚类也是有帮助的。 举例: import …

【pytorch07】broadcast广播

Broadcasting expand(与上一节说的expand功能相同,可以扩展维度,但是这里是自动的,扩展的时候不需要拷贝数据)without coping data broadcast实施 从最小的维度开始匹配,如果前面没有维度的话&#xff0…

BFS:解决拓扑排序问题

文章目录 什么是拓扑排序?关于拓扑排序的题1.课程表2.课程表Ⅱ3.火星词典 总结 什么是拓扑排序? 要知道什么拓扑排序我们首先要知道什么是有向无环图,有向无环图我们看名字其实就很容易理解,有向就是有方向,无环就是没…

类的默认成员函数——构造与析构函数

如果一个类中什么成员都没有,简称为空类。但是空类中真的什么都没有吗? 当然不是,任何类在什么都不写的情况下,编译器会自动生成6个默认成员函数 1.构造函数 1.1概念引入 对于以下这个Date类,可以通过Init公有方法给…

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

IIC学习笔记

目录 #I2C涉及相关知识 #I2C相关介绍 欢迎指正,希望对你,有所帮助!!! 个人学习笔记,参考文献,链接最后!!! #I2C涉及相关知识 SDA串行数据线: Ser…

GB28181视频汇聚平台EasyCVR接入Ehome设备视频播放出现异常是什么原因?

多协议接入视频汇聚平台EasyCVR视频监控系统采用了开放式的架构,系统可兼容多协议接入,包括市场标准协议:国标GB/T 28181协议、GA/T 1400协议、JT808、RTMP、RTSP/Onvif协议;以及主流厂家私有协议及SDK,如:…

RK3568平台(音频篇)耳机插拔检测

一.硬件原理图 耳机输出硬件原理图: 耳机实物图: 耳机插入硬件原理: 耳机插入后HP_DET_L会连接耳机的GND,从而实现HP_DET_L叫从高到低的状态。 耳机插入软件原理: 软件需要在驱动里面定时的读取gpio的状态&#xf…

2024期权交易佣金手续费最低是多少?期权交易有哪些成本?

显性成本 期权交易的显性成本包含期权交易的佣金和交易所费用,分别支付给券商和交易所,统一由券商代收。 佣金 期权佣金是期权交易时支付给券商的费用,佣金通常以交易金额的一定比例计算,可以是固定费用,也可以是滑…

尽管与 ChatGPT 达成了合作,但据报道苹果仍在与 Meta 进行人工智能谈判

苹果最近宣布计划将人工智能纳入 iOS 18 以及新的 iPhone 16 和 iPhone 16 Pro 机型中,并开始与潜在的生成式人工智能合作伙伴 Meta 进行讨论。 据《华尔街日报》报道,苹果已与 Meta 就将其跨平台使用的生成式人工智能模型整合到 Apple Intelligence 中…

avi格式视频提示无法播放错误,怎么解决?

AVI视频属于一种无损质量的视频格式,一般来说是兼容Windows系统播放的。播不了可能是由以下原因导致的: 1.文件损坏:可能是原文件在转码压缩的过程中操作不当,导致数据丢失、文件损坏。 2.播放器格式不支持:可能系统的…

计算机图形学入门16:阴影映射

1.前言 前面几篇关于光栅化的文章中介绍了如何计算物体表面的光照,但是着色并不会进行阴影的计算,阴影需要单独进行处理,目前最常用的阴影计算技术之一就是Shadow Mapping技术,也就是俗称的阴影映射技术。 2.阴影映射 Shadow Map…

使用Tauri+vite+koa2+mysql开发了一款待办效率应用

🎉使用Taurivitekoa2mysql开发了一款待办效率应用 📝项目概述 这是一个基于taurivite的应用,它采用了一些最新的前端技术,包括 Tauri、Vue3、Vite5、koa2 和 mysql。它提供了丰富的效率管理工具。 应用地址:https:/…

excel字符串列的文本合并

excel表有两列,第一列是“姓名”,第二列是“诊断”,有高血压、糖尿病等。我想出一个统计表,统计“姓名”,把某一个姓名的诊断不重复的用、拼接起来,比如“张三”的诊断为“点高血压”、糖尿病。我们可以用T…