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

news2024/10/11 0:25:29

文章目录

  • 一、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    126MB

docker 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    126MB
	
docker 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.coloradmin.cn/o/790055.html

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

相关文章

LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程

编者按:在训练大语言模型的过程中,构建高质量的训练数据集是非常关键的一步,但关于构建大模型训练所需数据集的通用数据处理流程(Data pipelines)的相关资料极为稀少。 本文主要介绍了基于Common Crawl数据集的数据处理流程。首先,文章概述了…

Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台 +支持二次开发定制

提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含:录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发…

SNMP协议是什么?

SNMP协议是什么? 简单网络管理协议(Simple Network Management Protocol,SNMP)是由互联网工程任务组定义的一套网络管理协议。该协议是基于简单网关监视协议(Simple Gateway Monitor Protocol,SGMP&#x…

芯片制造详解.晶圆的诞生.学习笔记(二)

芯片制造详解.晶圆的诞生.学习笔记.二 一、硅片的制造二、硅片、晶圆和芯片的区别三、从硅棒到晶圆(1).截断(2).四探针法(3).裁成硅段(4).滚磨(5).研磨定位边(槽)(6).硅段切片(7).磨片(8).倒角(9).打上激光标识码(10).刻蚀(11).化学机械抛光(CMP)(12).湿法清洗(13).检测 包装 四…

Nodejs 安装之后cmd 输入npm -v 提示error的问题解决

1.问题现象: 安装时候选择: 2. 解决问题 卸载nodejs 删除安装路径下的node_modules, 重新安装 按照下面的选择

指数函数exp

目录 指数函数及e 指数增长 复数指数 练习 1. expgui 2. 计算e 3 五角星绘制 指数函数及e (1)的比值总是常数 (2)的导数为其自身。(根据比值1推导出e的值) %% Plot a^t and its approximate derivat…

vue预览和下载txt、PDF、execl等在线文件

因为浏览器默认能直接打开TXT、PDF等文件索引默认就是点击链接打开文件。但是浏览器却又不能在线打开execl、world等文件。 现在我们可以统一的实现文件的预览以及下载。 下载文件 downloadfile方法 downloadfile(url,fileName){const newUrl url;const x new XMLHttpRequ…

Rust vs Go:常用语法对比(七)

题图来自 Go vs Rust: Which will be the top pick in programming?[1] 121. UDP listen and read Listen UDP traffic on port p and read 1024 bytes into buffer b. 听端口p上的UDP流量,并将1024字节读入缓冲区b。 import ( "fmt" "net&qu…

C数据结构与算法——队列 应用(C语言纯享版 迷宫)

实验任务 (1) 掌握顺序循环队列及其C语言的表示; (2) 掌握入队、出队等基本算法的实现; (3) 掌握顺序循环队列的基本应用(求解迷宫通路)。 实验内容 使用C语言实现顺序循环队列的类型定义与算法函数;编写main()函数…

架构设计-高性能(一、存储高性能)

1.简介 数据存储的性能是系统高性能的两大组成部分之一。目前市场的数据存储技术是五花八门,并且目前针对在大数据环境下针对不同的需求和场景提出了更多不同类型的数据库。本文主要讲解分类中的关系型数据库和NoSql数据库的高性能。 2.关系型数据库 虽然存储技术在…

ClickHouse(二):ClickHouse特性

​目录 1. 完备的DBMS功能 2. 列式存储 3. 数据压缩 4. 向量化执行引擎 5. 关系模型与标准SQL查询 ​​​​​​​6. 多样化的表引擎 ​​​​​​​7. 多线程与分布式 ​​​​​​​8. 多主架构 ​​​​​​​9. 交互式查询 ​​​​​​​10. 数据分片与分布式查询…

03 shell 编程

变量 语言型 编译型语言 解释型语言 shell脚本语言是解释型语言shell脚本的本质:shell命令的有序集合 shell 编程的基本过程 基本过程分为三步: step1. 建立 shell 文件 包含任意多行操作系统命令或shell命令的文本文件; step2. 赋予shell文件执行…

Flutter 状态组件 InheritedWidget

Flutter 状态组件 InheritedWidget 视频 前言 今天会讲下 inheritedWidget 组件,InheritedWidget 是 Flutter 中非常重要和强大的一种 Widget,它可以使 Widget 树中的祖先 Widget 共享数据给它们的后代 Widget,从而简化了状态管理和数据传递…

Spark(36):Structured Streaming 编程模型

目录 0. 相关文章链接 1. 的核心思想 2. 基本概念 2.1. 输入表 2.2. 结果表 2.3. 输出 2.4. 快速入门代码的再次说明 3. 处理事件-时间和延迟数据(Handling Event-time and Late Data) 4. 容错语义 0. 相关文章链接 Spark文章汇总 1. 的核心思想 Structured Streami…

4、非线性数据结构

上一节课我们讲了线性数据结构,这一节我们说下非线性数据结构。 非线性数据结构,从字面意思来看,就是指不是线性的结构。线性结构的特点是只有一个前驱和一个后继。 那么非线性结构的特点就是有多个前驱或后继了。 如果只存在一个没有前驱的…

第一次编程测试(分频器)

一,分频器 定义 分频器(Divider)是一种电子电路或设备,用于将输入信号的频率降低到较低的频率。它常用于数字系统、通信系统和计时应用中。原理 整数分频器使用计数器来实现频率的降低。计数器根据输入信号的边沿触发进行计数&am…

STM32MP157驱动开发——按键驱动(中断)

文章目录 编写使用中断的按键驱动程序编程思路设备树相关驱动代码相关 代码修改设备树文件gpio_key_drv.cMakefile编译测试 编写使用中断的按键驱动程序 对于使用中断的按键驱动,内核自带的驱动程序 drivers/input/keyboard/gpio_keys.c 就可以,需要做的…

❛‿˂̵✧ THU数据结构(上)(2023spring) 完成啦(⑅˃◡˂⑅)

实际上来讲,是课程截止到今天晚上( ◔︎ ‸◔︎) 总结一下,放假十来天,边敲边听。后期有些地方应该再复习复习。 接下来的关于数据结构的目标 〇 把(上)中没敲完的结构敲完 〇 ZJU的配套题目写完 〇 学习&#xff…

linux系统GHOST备份方案

linux系统GHOST备份方案 Windows系统备份可以用ghost工具软件完成,Linux系统不能完全依赖于ghost工具,一则是ghost本身是有版权的软件,二则ghost只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等比较高级的文件系统&a…

9.python设计模式【外观模式】

内容:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一个子系统更加容易使用。 角色: 外观(facade)子类系统(subsystem classes) UML图 举…