架构师系统-Docker(五)-镜像仓库

镜像仓库管理

docker仓库,用来管理镜像

主要分为公共仓库和私人仓库,下面介绍了公共仓库Docker Hub、私人仓库Registry和harbor

DockerHUb仓库管理

什么是DockerHUb

保存和分发镜像的最直接方法就是使用 Docker Hub

Docker Hub 是 Docker 公司维护的公共 Registry,用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中,如果不希望别人访问自己的镜像,也可以购买私有 repository

账号注册和登陆

一般,你需要先在docker中心创建一个账户(如果您尚未有),你可以直接在Docker Hub创建你的账户。

c4322be9aae6481c916c95e42813289c.png e55fd1bd1a4548a9a99fd172d4d43075.png

Docker客户端登录

使用docker login登录dockerhub

这将提示您输入用户名,这个用户名将成为你的公共存储库的命名空间名称。如果你的名字可用,docker会提示您输入一个密码和你的邮箱,然后会自动登录到Docker Hub,你现在可以提交和推送镜像到Docker Hub的你的存储库。

docker login

fcc3e97a9bb74ec1b4fc66014b1c10ff.png

出现 Login Succeeded就说明我们登录成功

注:你的身份验证凭证将被存储在你本地目录的.dockercfg文件中

管理镜像

通过docker images可以看到我们所有的镜像列表

删除镜像

我们现在的learn-docker-storage有三个版本,现在我们把前两个有问题的版本删除,docker rmi 镜像ID可以删除镜像

docker rmi learn-docker-storage:0.0.1 learn-docker-storage:0.0.2

 

这样我们就删除了我们没有用的镜像了,可以节省内存空间

修改镜像命名

修改镜像的 repository 使之与 Docker Hub 账号匹配

Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[用户名]/镜像名:tag

我们通过 docker tag 命令重命名镜像

docker tag learn-docker-storage:0.0.3 baiyp/learn-docker-storage:0.0.3

5a243354178140eeac6f1dd080c66862.png

这样就将我们的镜像改名了,这个就符合我们的dockerhub的规范了

推送镜像

推送镜像

现在我们要将我们的镜像推送到docker hub

推送镜像的规范是docker push 注册用户名/镜像名:tag,因为我们上面已经把镜像名字改正确了,所以可以直接推送。

docker push baiyp/learn-docker-storage:0.0.3

这样我们就将我们的数据推送到docker hub,我们发现只有最顶层的镜像推送了,openjdk的镜像并没有推送,直接复用了仓库的,这就是分层的好处

检查镜像

我们可以到docker hub检查我们的镜像

b3da1beb619c41428f657b739d110755.png

可以看到我们的镜像已经推送过来了,点开详情可以看到我们镜像的内容以及tag号

a2e8d03a7ab449e1aa65964c8f4b2154.png 

仓库镜像测试

删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像

docker rmi baiyp/learn-docker-storage:0.0.3 learn-docker-storage:0.0.3

再次查看本地镜像,已经没有了我们的微服务的镜像

docker images

从仓库拉取镜像

这个时候可以从docker hub拉取镜像

docker pull baiyp/learn-docker-storage:0.0.3
这个时候已经将镜像拉取下来了,我们可以运行镜像了运行镜像
执行下面的命令进行创建镜像docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
baiyp/learn-docker-storage:0.0.3访问测试
我们访问下,检查下是否可以正常运行curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool

4614ba27bc2149718fb328d207e44fc1.png

到这里我们就完成dockerhub仓库的发布与拉取直接运行测试
在真实环境中,我们一般不会拉取在运行,一般都是直接运行,如果docker检查镜像不存在会自动拉取停止服务并删除镜像docker rm -f learn-docker-storagedocker rmi baiyp/learn-docker-storage:0.0.3我们直接运行容器docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
baiyp/learn-docker-storage:0.0.3这一个run命令就解决了容器的拉取以及容器运行的问题

bb91f856bbd744c2b6e40702cdc9429f.png

registry仓库管理

registry简介

官方提供了Docker Hub网站来作为一个公开的集中仓库,然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

docker registry 就是管理 docker 镜像的服务, Docker 公司维护的 registry 就是 http://hub.docker.com ,它可以让我们方便的下载预先做好的镜像。

安装registry

我们可以通过获取官方的 registry 镜像来运行。

这将使用官方提供的 registry 镜像来启动私有仓库,默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。我们可以通过 -v 参数将镜像文件存放在本地的指定路径。

docker run -d \
-p 5000:5000 \
-v /tmp/data/registry:/var/lib/registry \
--restart=always \
registry这样我们的registry已经启动起来了访问测试
这时我们可以通过浏览器访问 http://ip:5000/v2/_catalog 查看仓库是否启动成功。curl http://192.168.64.152:5000/v2/_catalog

89dd6e318d3b4304a701a3e40873b8e7.png

上传镜像

registry 上传镜像的命名规范是 仓库IP:5000/镜像名称:tag

修改镜像名称

将我们的镜像改成服务规范的名字

docker tag baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3推送镜像
使用命令推送镜像docker push 192.168.64.153:5000/learn-docker-storage:0.0.3
我们发现推送报错了,这是因为docker推送默认使用的https的方式,而我们的registry只支持http的方式

6865383ec2a345e3b396e892c2991e13.png

修改Docker推送配置

对于 Linux 系统,我们可以在 /etc/docker/daemon.jsondaemon.josn 文件不存在则新建该文件)

 

vi /etc/docker/daemon.json
添加下面的配置{ "insecure-registries": ["仓库IP:5000"] }
完整的配置如下{"insecure-registries": ["192.168.64.153:5000"],"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
执行以下命令重启重新加载配置并生效systemctl daemon-reload
service docker restart再次进行推送
执行命令再次推送docker push 192.168.64.153:5000/learn-docker-storage:0.0.3我们发现这次推送成功了再次访问registry
访问测试检查是否已经推送curl http://192.168.64.153:5000/v2/_catalog | python -m json.tool

172a052455b1463e82df1c11c7eddf32.png

我们发现我们的镜像已经推送到了registry,我们通过以下URL访问下tag列表curl http://192.168.64.153:5000/v2/learn-docker-storage/tags/list | python -m json.tool

17d8bb5dc008497e8b947bdcdf4ca7c5.png

registry镜像测试

删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像docker rmi baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3运行registry中的镜像
docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
192.168.245.165:5000/learn-docker-storage:0.0.2我们发现自己的registry很快就拉取并且运行起来了访问微服务测试curl http://192.168.245.165:8003/storage/employe/findByID/10001 | python -m json.tool

2d13ef9ae5e0409897aae5c7390223a3.png

使用Harbor管理仓库

什么是Harbor

  • 管理用户界面
  • 基于角色的访问控制
  • LDAP/AD 集成及日志审计等基本运维操作

harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库。

另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似 于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的 CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的 漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。

Harbor的三种安装方式

这里我们使用离线安装

  • 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
  • 离线安装:安装包包含部署的相关镜像,因此安装包比较大
  • OVA安装程序(第三方):当用户具有vCenter环境时,使用此安装程序,在部署 OVA后启动Harbor

为什么使用私用仓库

公司的项目一般不予许我们上传到 Docker Hub 这类的公共仓库中,所有学会创建一个私有仓库也是非常必要的

虽然hub.docker.com上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案。

harbor 的基本组件

组件功能
harbor-adminserver配置管理中心
harbor-db数据库
harbor-jobservice镜像复制
harbor-log日志操作
harbor-uiWeb管理页面和API
nginx前端代理,负责前端页面和镜像上传/下载转发
redis会话
registry镜像存储

前置工作

下载安装包

Harbor官方地址:Releases · goharbor/harbor · GitHub 下载最新版安装包

67782b7a9c6f49059a8a4be4fe67ae13.png 

准备环境

需要安装docker以及docker-compose的环境上面我们已提前安装了

  • 安装Docker环境
  • 安装docker-compose环境

离线安装

解压安装包

解压harbor的安装包tar -zxf harbor-offline-installer-v2.1.4.tgz
进入目录 然后将harbor.yml.tmp复制一份并该命为harbor.ymlcd harbor
cp harbor.yml.tmpl harbor.yml注意: 这里跟老版本不一样,没有了harbor.cfg文件,我们需要手动复制harbor.yml.tmpl在做修改即可修改harbor.yml
harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可!
所以 把https相关的已经注释掉

115c3d85dbb24c19bb5cefcd35950e3e.png

 并注意配置文件的用户名密码配置,默认是 用户名是:admin,密码是:Harbor12345,如果修改需要安装前修改

加载本地镜像

使用docker load命令加载本地镜像,不用再从dockerhub下载了

docker load -i harbor.v2.1.4.tar.gz
这样容器镜像就被加载到了本地,我们可以通过docker images命令查看导入的镜像docker images
执行安装命令
先执行预处理命令,会创建一些文件夹,初始化一些文件./prepare

15bee90b79f8475f9e18c17c07ad8b17.png

然后开始真正的安装过程

./install.sh

b097c29d66a14c08856f35e422fdc5e3.png

如果出现-Harbor has been installed and started successfully表示安装成功,并查看docker进程docker ps可以看到很多服务已经起来了。启动和停止harbor
在harbor的安装目录执行以下命令就可以启动和停止了# 启动
docker-compose up -d 
# 停止
docker-compose stop 
# 重新启动
docker-compose restart 
harbor使用
访问harbor
输入 http://harborIP就可以直接访问了,这里访问我们的地址http://192.168.64.153/

fcba13652fa947d2b54c86d618efefe4.png

 输入用户名密码就可以登录了 ,如果没有修改配置文件 默认是 用户名是:admin,密码是:Harbor12345

526ea7318523406f9d0cf89fc0dbfef4.png

登录后就可以进行操作了

Docker登录harbor

使用docker login命令就可以登录harbor了

docker login -u admin -p Harbor12345 192.168.245.165
我们发现登录报错了,这和registry一样,docker模式使用https方式,而我们使用的是http的方式登录修改Docker配置
对于 Linux 系统,我们可以在 /etc/docker/daemon.json (daemon.josn 文件不存在则新建该文件)vi /etc/docker/daemon.json
添加下面的配置{ "insecure-registries": ["harbor地址"] }
完整的配置如下{#因为默认端口号是80 所以不需要加端口号"insecure-registries": ["192.168.64.153"],"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
执行以下命令重启重新加载配置并生效systemctl daemon-reload
service docker restart再次进行登录
docker login -u admin -p Harbor12345 192.168.64.153
这次我们就成功登录了

8e9f0dd9e4484b78ab9e2f21a9b1fa8f.png

修改镜像tag
我们推送镜像我要把我们的镜像名称改成符合规范的格式docker tag \
192.168.64.153:5000/learn-docker-storage:0.0.3 \
192.168.64.153/library/learn-docker-storage:0.0.3这里有一个library路径,是harbor默认的项目名称

eaefdb16e2af415dacedd57df67fe327.png

推送镜像
可以通过docker push进行推送镜像,注意需要先登录在进行推送docker push 192.168.64.153/library/learn-docker-storage:0.0.3

到这里我们已经推送到了harbor,我们可以登录library页面查看

047b3ff064054a37bc33a31c659aff7e.png 

harbor 测试

删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像

docker rmi \
192.168.64.153:5000/learn-docker-storage:0.0.3 \
192.168.64.153/library/learn-docker-storage:0.0.3运行harbor 中的镜像
执行运行命令docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
192.168.64.153/library/learn-docker-storage:0.0.3访问微服务测试curl http://192.168.245.165:8003/storage/employe/findByID/10001 | python -m json.tool

查看harbor详情

详情里面会显示拉取次数

6f12ef2980bc49ac936a9b9f3aa31c24.png 

HarBor用户权限说明

HarBor用户角色在项目(项目-成员-新加成员)中为3类:项目管理员、开发人员、访客

  • 项目管理员:增删改查
  • 开发人员:上传和下载
  • 访客:只允许下载

HarBor权限配置

新建用户

点击创建用户可以创建一个用户

 8b4590c7b97d4a78b9cc7ab26ec51e9f.png

25040e554e9a46e8883907f192f77175.png 8fa595c4489b41229d448f022e467ac5.png

 访客只能进行拉取不能推送和管理

docker登录测试
登录docker客户端docker login -u test -p Qwert123 192.168.64.153
尝试推送镜像docker push 192.168.64.153/library/learn-docker-storage:0.0.3
我们发现是无法进行推送镜像的拉取镜像测试
先删除本地的容器以及镜像docker rm -f learn-docker-storagedocker rmi 192.168.64.153/library/learn-docker-storage:0.0.3
尝试拉取并启动本地镜像docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
192.168.245.165/library/learn-docker-storage:0.0.3微服务访问测试curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool

 

 

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

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

相关文章

Unreal Engine创建Plugin

打开UE工程,点击编辑,选择插件 点击“新插件”按钮,选择“空白选项”填入插件名字"MultiPlayerPlugin",填入插件作者、描述,点击“创建插件”按钮打开C工程,即可看到插件目录,编译C工…

ShardingSphere 5.x 系列【25】 数据分片原理之 SQL 解析

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 分片执行流程1.1 Simple Push Down1.2 SQL Federation2. SQL 解析2.1 解析…

【003_音频开发_基础篇_Linux进程通信(20种你了解几种?)】

003_音频开发_基础篇_Linux进程通信(20种你了解几种?) 文章目录 003_音频开发_基础篇_Linux进程通信(20种你了解几种?)创作背景Linux 进程通信类型fork() 函数fork() 输出 2 次fork() 输出 8 次fork() 返回值fork() 创建子进程 方…

RDD编程初级实践

参考链接 spark入门实战系列--8MLlib spark 实战_mob6454cc68310b的技术博客_51CTO博客https://blog.51cto.com/u_16099212/7454034 Spark和Hadoop的安装-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/138021948?spm1001.2014.3001.5501 1. spark-shell…

【python】语言学习笔记--用来记录总结

请问以下变量哪些是tuple类型: a ()b (1)c [2]d (3,)e (4,5,6)answer在Python中,元组(tuple)是由逗号分隔的一组值组成的有序序列,通常用圆括号括起来。让我们逐个检查变量,看哪些是元组类型&#xff…

C#基础之冒泡排序

排序初探 文章目录 冒泡排序1、概念2、冒泡排序的基本原理3、代码实现思考1 随机数冒泡排序思考2 函数实现排序 冒泡排序 1、概念 将一组无序的记录序列调整为有序的记录序列(升、降序) 2、冒泡排序的基本原理 两两相邻,不停比较&#x…

海外仓精细化管理方法:ABC库存分析,大幅提升仓库有效利用率

ABC分析是海外仓管理的一种比较有效的方法,主要是帮助评估库存产品对仓库的价值量大小。这是一种根据需求、成本和风险数据等因素综合进行的评估,通过评估,仓管员可以更有效的组织和安排仓库产品,提升仓库的有效利用率&#xff0c…

微信小程序:11.本地生活小程序制作

开发工具: 微信开发者工具apifox进行创先Mock 项目初始化 新建小程序项目输入ID选择不使用云开发,js传统模版在project.private.config中setting配置项中配置checkinalidKey:false 梳理项目结构 因为该项目有三个tabbar所以我们要创建三…

交换排序-冒泡排序 快速排序

目录 3.1 冒泡排序 3.2 快速排序 Hoare版本快速排序 挖坑法快速排序 前后指针法快速排序 快速排序优化-三数取中法 快速排序非递归 3.1 冒泡排序 思想:升序情况下:左边大于右边就进行交换,每一次把最大的放在最后一位。 void Swap(int…

微信小程序:6.事件

什么事事件 事件就是渲染层到逻辑层的通讯方式,比如提交表单,按钮点击都可以看作一个事件。 小程序中常用的事件 事件对象属性列表 当事件回调时,会收到一个事件对象event,他详细属性如夏表所示: target和curren…

web(微博发布案例)

示例&#xff1a; 1、检测空白内容 2、发布内容 html: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta …

本地Windows主机,使用pycharm通过wsl的ubuntu来创建django项目

Windows主机在pycharm中通过wsl的ubuntu来创建django项目 需求&#xff1a;在windows主机中创建python项目再转接到linux服务器中运行&#xff0c;有点麻烦。【特别是存放日志文件或其他文件路径时需要修改为linux中的路径】 1&#xff1a;我的是windows主机 2&#xff1a;有…