简单的docker学习 第11章 镜像中心
第11章 镜像中心
Docker Hub 与阿里云都是 Docker 的公网镜像中心,用户可以将自己的镜像 push 到公网镜像中心中自己的镜像仓库,并可将仓库设置为私有库,使他人无法看到,更无法 pull,以保证镜像的安全性。不过,在实际生产中为了保障镜像的安全性,为了避免由于网络带宽或网速等问题而影响到镜像的拉取或推送,公司一般不会使用公网镜像中心,而是在公司内部搭建一个私有镜像中心。
注册发布暂不赘述,官网查看
11.7 harbor镜像中心
11.7.1 Harbor 简介
Harbor 是由 VMware 公司中国团队使用 Go 语言开发的一款 Registry server 开源项目,其是在 Docker Registry 的基础之上进行了二次封装。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能与安全,同时也提供了一个非常方便、漂亮的 Web 管理界面。
Harbor 的官网为 https://goharbor.io/ 。Harbor 在 github 上的官网 。
11.7.2 Harbor 安装系统要求
Harbor 要安装的主机需要满足硬件与软件上的要求。
-
硬件要求
硬件资源 最小要求 推荐要求 CPU 2CPU 4CPU 内存 4GB 8GB 硬盘 40G 160G -
软件要求
软件资源 版本要求 作用 Docker CE引擎 17.06.0 或更高版本 Harbor 是以容器形式在运行,需要Docker 引擎 Docker Compose 1.18.0 或更高版本 Harbor 是 10 个容器在运行,通过 Docker ompose 编排 OpenSSL 最新版 生成数字证书,以支持 HTTPS
11.7.3 安装 Harbor
-
下载安装包
在官网复制 Latest 最新版的离线安装包的下载链接地址,在 Linux 系统中通过 wget 命令下载,将其下载到某目录中。
wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz
-
解压安装包
将下载好的包解压到某目录中。解压后其就是一个独立的目录 harbor
tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps
-
修改 harbor.yml
复制一份 harbor 解压包中的 harbor.yml.tmpl,并重命名为 harbor.yml。修改 harbor.yml 配置文件。共修改三处:
-
将 hostname 指定为当前主机的 IP
-
注释掉所有 https 相关配置
-
记住(或修改)admin 用户的登录密码
另外需要注意一点,harbor 默认的端口号为 80,修改为其他不易占用端口8005
cp harbor.yml.tmpl harbor.yml
-
-
运行 install.sh
运行 harbor 解压目录中的 install.sh 命令,其会自动完成五步的安装过程,并在最终启动很多的容器。这些容器本质上就是通过 docker-compose 进行编排管理的
11.7.4 windows 浏览器访问
在浏览器地址栏中输入 http://192.168.138.129:8005 即可看到如下页面,在其中输入用户名admin,密码为 harbor.yml 中设置的密码,即可登录。
11.7.5 Harbor 的启停
由于 Harbor 是由 10 个容器同时运行完成的,且是通过 docker-compose 完成的容器编排。Harbor 安装完成后会在 harbor 解压目录中生成 docker-compose.yml 文件,所以 Harbor的启停命令,都是由 docker-compose 完成的,且需要在 harbor 的解压目录中完成
-
Harbor 停止
docker-compose stop
-
Harbor 启动
docker-compose up -d
11.7.6 Docker 客户端操作
registry 私有镜像中心搭建成功了,Docker 客户端就可以对其进行操作了。
-
修改 daemon.json 文件
默认情况下,为了保证安全,Docker 客户端都采用的是 https 提交各种请求,例如,登录请求、pull 请求、push 请求等。但私有镜像中心不接受 https 请求。所以需要告诉 Docker客户端该镜像中心地址是安全的,这样 Docker 客户端将会自动采用 http 请求方式。而对Docker 客户端的告知方式是,手工修改 Docker 客户端的/etc/docker/daemon.json 文件。在文件中添加如下内容:
vim /etc/docker/daemon.json {"registry-mirrors": ["https://z583cmea.mirror.aliyuncs.com"],"insecure-registries": ["192.168.138.129:8005"] }# 重启docker服务 systemctl restart docker
-
登录私有镜像中心
docker login 192.168.138.129 Username: admin Password: 101022
-
新增test项目
-
复制并重命名镜像
通过 docker tag 命令可以对原有镜像进行复制并重命名。
这个重命名的镜像的<repository>中需要采用<domain-name>/<project-name><software-name>格式。
当然,如果需要区分用户的话,也可以采用<domain-name>/<project-name>/<username>/<software-name>格式。
- domain-name => 192.168.138.129:8005
- project-name => test
- username => admin
- busy-box:1.0
# 复制三个镜像 docker tag busybox 192.168.138.129:8005/test/admin/busy-box:1.0 docker tag busybox 192.168.138.129:8005/test/admin/busy-box:1.2 docker tag busybox 192.168.138.129:8005/test/admin/busy-box:1.3
-
推送镜像
docker push 192.168.138.129:8005/test/admin/busy-box:1.0 docker push 192.168.138.129:8005/test/admin/busy-box:1.2 docker push 192.168.138.129:8005/test/admin/busy-box:1.3
-
查看镜像中心
-
拉取镜像文件
点击拉取命令复制图标即可
docker pull 192.168.138.129:8005/test/admin/busy-box:1.3
-
登出私有镜像中心
docker logout 192.168.139.129:8005
11.9 Harbor 架构与工作原理
11.9.1 Harbor 架构模块
Harbor 整体架构中的组件非常多,下面简单介绍几个非常重要的模块。
-
Proxy
反向代理服务器,由 Nginx 充当。负责接收并转发来自客户端的请求,无论请求是直接来自于浏览器的 HTTP 请求,还是来自于 Docker 客户端的命令。根据不同的请求,Proxy 会将其转发至 Core 或 Registry 模块
-
Core
Harbor 的核心模块,有两个非常重要的子服务模块:
-
Notification Manager:通过 webhook 实现的消息管理模块。当 registry 中镜像发生改变时,会立即通知到 web 页面,即会在 web 页面中显示更新。
-
API Server:Proxy 根据不同的路由规则将请求首先转发到 API Server 的不同接口。但无论哪个处理接口,都强制要求对请求进行权限控制,即都需要请求先根据不同身份从
-
API Server 中的 AUTH 模块中获取到一个有效的 token。AUTH 模块是通过 token service实现的用户认证。
-
-
GC Collector
负责整个系统中的 GC 管理。
-
Chart Museum
Helm 的仓库。
-
Notary
数据权限控制器。
-
Log Collector
负责 Harbor 中其他模块的日志汇总。
-
Job Service
负责镜像复制。在高可用 Harbor 集群中,通过 Job Service 可以将本地镜像同步到远程Harbor 实例上。
-
Distribution
镜像中心,由 registry 镜像充当,负责存储 Docker 镜像,及处理 docker push/pull 请求。
-
k-v storage
主要是为 Job Service 提供缓存服务的,将 Job 元数据临时性存放在其中。默认由 Redis充当。所以,Redis 在高可用 Harbor 集群中的作用很大
-
Local/Remote Storage
可以将工程元数据、用户数据、角色数据、同步策略以及镜像元数据等存放在本地或远程服务器中的内存块、文件或持久化对象中。不过,一般会使用 SQL Database。
-
SQL Database
用于存放工程元数据、用户数据、角色数据、同步策略以及镜像元数据等。默认采用PostgreSQL 数据库。
11.9.2 Harbor 架构图及工作原理
有关 Harbor 的系统架构描述,Harbor 在 GitHub 的官网中如下地址有直接的描述及架构图,架构图分解的非常细致。
11.9.3 Docker 命令执行流程
-
关于公钥与私钥
Harbor 搭建完毕后,token service 中就会保存该 harbor 的私钥,registry 中保存该 harbor的公钥。使用私钥加密称为数字签名,使用公钥解密称为签名验证。使用公钥加密称为加密,使用私钥解密稀烂解密。
-
docker login 命令
-
docker push 命令
相关文章:

简单的docker学习 第11章 镜像中心
第11章 镜像中心 Docker Hub 与阿里云都是 Docker 的公网镜像中心,用户可以将自己的镜像 push 到公网镜像中心中自己的镜像仓库,并可将仓库设置为私有库,使他人无法看到,更无法 pull,以保证镜像的安全性。不过&#x…...
PostgreSQL 15 使用物理复制槽 实现主从
一、系统环境 IP操作系统用途192.168.140.153CentOS 7.9.2009pg-主节点192.168.140.159CentOS 7.9.2009pg-从节点 二、单节点安装 2.1 主节点安装 参考前一篇文章 2.2 从节点安装 只需要先将rpm包安装即可,无需初始化数据库,无需启动服务。 三、主从…...

C# 中引用类型的探讨
引用类型的变量不直接包含其数据;它包含对其数据的引用。 如果按值传递引用类型参数,则可能更改属于所引 用对象的数据,例如类成员的值。 但是,不能更改引用本身的值;例如,不能使用相同引用为新对象分配内存…...

技术分享| 前端性能优化——虚拟滚动(Virtual Scroll)
前端遇到大量数据(尤其是大数据表)的DOM 渲染时,通常会卡顿,需要考虑优化性能问题,这里针对DOM 渲染引出“虚拟滚动”方案, 详细请在以下各文章中详细了解: vue插件 vue-virtual-scroll-list解决…...

Flink 实时数仓(四)【DWD 层搭建(二)流量域事实表】
前言 昨天刚搬到新校区,新校区小的可怜,好在之后出去实习交通可以方便点;待在学院太受限了,早点离开! 今天开始完成 DWD 层剩余的需求,上一节我们把日志数据根据不同类型分流写入到了不同的主题;…...
Go 1.19.4 接口-Day 10
1. 接口 1.1 基本介绍 接口中到底应该定义些什么? 在Go语言中,接口是声明函数的集合,但只有函数签名,没有具体的功能。 属于是面向对象中,行为的约束,面向对象中的类有自己的属性(可以当成数据…...

智能编程新纪元:腾讯AI代码助手的高效编程体验
智能编程新纪元:腾讯AI代码助手的高效编程体验 智能编程新纪元:腾讯AI代码助手的高效编程体验引言一、配置开发环境二、AI助手实现高效编程2.1 AI助手自动补全2.2 AI助手实现编程思维2.3 AI助手高效注解2.4 AI助手打破语言壁垒 三、帮助和提升四、优化和…...

使用snap安装docker配置阿里云镜像加速
使用snap安装docker非常的简单,一条命令即可 snap install docker 但是通过这个命令安装的docker, 配置阿里云镜像跟常规安装的配置起来不太一样, 下面讲一下配置流程 修改docker配置文件/var/snap/docker/current/config/daemon.json 这个文件应该是已经创建好…...
安全编程的代码示例
一、python代码示例 一个安全编程的示例是对输入进行严格的验证和过滤。比如,当用户在网页上输入用户名和密码时,应该对这些输入进行验证,防止恶意用户输入恶意代码或进行 SQL 注入等攻击。下面是一个简单的示例代码: import…...

【实现100个unity特效之15】最简单的方法使用shader graphs实现2d非像素和像素树叶草的随风摇摆效果
文章目录 前言非像素树叶草飘动效果新建材质效果像素树叶草飘动效果参考完结 前言 本文只是实现一个简单版本的2d树叶草随风摇摆的效果,如果你想要实现更加复杂的效果,包括2d互动草,你可以参考我之前的文章: 【推荐100个unity插件…...

Vue3+TS+element plus实现一个简单列表页面
期望完成效果 1.创建一个api api内容: 根据接口: 修改 url 和 函数的参数 以及 params里的内容 import { request } from "/utils/service" /** 查 */ export function getDyLogDataApi(page: any, limit: any, campaign_id: any, adgroup_id…...

Go语言中gin+gorm开发前端端分离博客时遇到的问题,gorm执行查询时如何选中特定字段?
代码获取 本篇文章的代码放在了Github上,可以免费获取。 https://github.com/zhangdapeng520/zdpgo_gin_examples 概述 在查询用户信息的时候,由于密码这个字段比较敏感,需要进行处理,不要返回给前端。 我一开始的解决方案是直…...
计算机网络11——数据库语法2
1、变量 (1)局部变量 函数里面定义的,变量名 类型 (2)会话变量 本次连接会话有效,不需要定义声明,直接使用,@变量名 类型 set @x=10; select @x;(3)系统变量 又叫全局变量,只有root变量才能使用,一直有效。因为全局变量影响服务器运行,所以Mysql不允许自定…...

华为USG6000E-S12防火墙Key exchange failed.无法SSH解决方案
由于目前防火墙算法太新,导致crt和xshell的版本无法登陆,按以下方法解决 一、下载华为本地加载除弱安全算法组件包之外的组件包 二、先改后缀名为.cfg,上传文件到防火墙 三、在用户视图下改后缀名为.mod 四、move 文件到$_install_mod文件夹 五、执行…...
matlab基础操作(五)
31.数组维数的减小 >> amagic(4),a(:,2)[] >> a(1,2)[] 带有下标的赋值维度不匹配。 >> a(2:4)[]%数组a将变为向量 32.元胞数组的创建 Cell indexing方式创建元胞数组 >> c(1,1){[1 4 3;0 5 8;7 2 9]} >> c(1,2){Anne Smith} >> c(2,1){…...

力扣 两数之和
致每一个初学算法的你。 题目 时间复杂度:O(N^2), 空间复杂度:O(1) 。 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {if (nums[i] …...
Django 实现连续请求
创作灵感:工作中,前端因为某些原因(极其特殊)无法发送两个请求,需要后端实现 言归正传: 背景:使用djangoapscheduler实现定时任务,现在创建任务以及启动任务为两个接口,…...

前端(react)框架nextjs
文章目录 一、什么是next.js1. 路由2. 打包 next build3. 部署 二、 next.js 和react区别三、webstorm使用nextjs四、开发常用总结如何修nextjs 启动监听的端口号?NGINX 反向代理 Next.js 项目配置 参考 一、什么是next.js 官网: https://www.nextjs.cn…...

深耕编程语言18年,对话 Rust、TypeScript、Nushell 核心贡献者 Sophia Turner | Open AGI Forum
作者 | Annie Xu 采访 | 卢威 责编 | Echo Tang 出品丨GOSIM 开源创新汇 编程语言的种类令人眼花缭乱,但成功的、常用的编程语言却是凤毛麟角。在深耕编程语言研发 18 年的 Sophia June Turner 看来,编程语言成功的关键在于其研发团队的透明度和机制建…...

深度学习--图像分割UNet介绍及代码分析
UNet介绍 参考UNet网络介绍整体架构UNet过程输入编码器(下采样)中间特征表示解码器(上采样)输出 代码详解unetUP和Unet关系上采样模块——unetUp用于图像分割的卷积神经网络(CNN)架构模块——Unet类的定义初…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...