Docker私服搭建--Harbor
Docker私服搭建--Harbor
相关优质内容来源:
Kubernetes中文社区:Harbor用户机制、镜像同步和与Kubernetes的集成实践
Harbor概述
Docker官方提供了Registry具备此功能,但管理方面较弱,不适合企业级的应用,今天给大家介绍Harbor的使用。
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
容器的核心在于镜象的概念,由于可以将应用打包成镜像,并快速的启动和停止,因此容器成为新的炙手可热的基础设施CAAS,并为敏捷和持续交付包括DevOps提供底层的支持。
而Habor和Docker Registry所提供的容器镜像仓库,就是容器镜像的存储和分发服务。之所以会有这样的服务存在,是由于以下三个原因:
- 提供分层传输机制,优化网络传输
- Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
- 提供WEB界面,优化用户体验
- 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
- 支持水平扩展集群
- 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
Harbor的安全机制
在Harbor中,用户主要分为两类。一类为管理员,另一类为普通用户。两类用户都可以成为项目的成员。而管理员可以对用户进行管理。
成员是对应于项目的概念,分为三类:管理员、开发者、访客。管理员可以对开发者和访客作权限的配置和管理。测试和运维人员可以访客身份读取项目镜像,或者公共镜像库中的文件。
从项目的角度出发,显然项目管理员拥有最大的项目权限,如果要对用户进行禁用或限权等,可以通过修改用户在项目中的成员角色来实现,甚至将用户移除出这个项目。
Harbor的镜像同步
为什么需要镜像同步
由于对镜像的访问是一个核心的容器概念,在实际使用过程中,一个镜像库可能是不够用的,下例情况下,我们可能会需要部署多个镜像仓库:
- 国外的公有镜像下载过慢,需要一个中转仓库进行加速
- 容器规模较大,一个镜像仓库不堪重负
- 对系统稳定性要求高,需要多个仓库保证高可用性
- 镜像仓库有多级规划,下级仓库依赖上级仓库
更常用的场景是,在企业级软件环境中,会在软件开发的不同阶段存在不同的镜像仓库,
- 在开发环境库,开发人员频繁修改镜像,一旦代码完成,生成稳定的镜像即需要同步到测试环境。
- 在测试环境库,测试人员对镜像是只读操作,测试完成后,将镜像同步到预上线环境库。
- 在预上线环境库,运维人员对镜像也是只读操作,一旦运行正常,即将镜像同步到生产环境库。
- 在这个流程中,各环境的镜像库之间都需要镜像的同步和复制。
Harbor的镜像同步机制
有了多个镜像仓库,在多个仓库之间进行镜像同步马上就成为了一个普遍的需求。比较传统的镜像同步方式,有两种:
- 第一种方案,使用Linux提供的RSYNC服务来定义两个仓库之间的镜像数据同步。
- 第二种方案,对于使用IaaS服务进行镜像存储的场景,利用IaaS的配置工具来对镜像的同步进行配置。
这两种方案都依赖于仓库所在的存储环境,而需要采用不同的工具策略。Harbor则提供了更加灵活的方案来处理镜像的同步,其核心是三个概念:
- 用Harbor自己的API来进行镜像下载和传输,作到与底层存储环境解耦。
- 利用任务调度和监控机制进行复制任务的管理,保障复制任务的健壮性。在同步过程中,如果源镜像已删除,Harbor会自动同步删除远端的镜像。在镜像同步复制的过程中,Harbor会监控整个复制过程,遇到网络等错误,会自动重试。
- 提供复制策略机制保证项目级的复制需求。在Harbor中,可以在项目中创建复制策略,来实现对镜像的同步。与Docker Registry的不同之处在于,Harbor的复制是推(PUSH)的策略,由源端发起,而Docker Registry的复制是拉(PULL)的策略,由目标端发起。
Harbor的多级部署
在实际的企业级生产运维场景,往往需要跨地域,跨层级进行镜像的同步复制,比如集团企业从总部到省公司,由省公司再市公司的场景。
这一部署场景可简化如下图:
更复杂的部署场景如下图:
一、安装
1.1 docker安装
# yum 包更新
[root@centos7 ~]# yum update
# 卸载旧版本 Docker
[root@centos7 ~]# yum remove docker docker-common docker-selinux docker-engine
# 安装软件包
[root@centos7 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker yum源
[root@centos7 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
[root@centos7 ~]# yum -y install docker-ce
# 启动 Docker
[root@centos7 ~]# systemctl start docker
# 查看 Docker 版本号
[root@centos7 ~]# docker --version
开启docker远程访问:
vim /lib/systemd/system/docker.service
# 找到ExecStart行,修改成下边这样
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
1.2 docker compose安装
1.2.1 方式一
# 安装 epel-release
[root@centos7 ~]# yum install epel-release
# 安装 python-pip
[root@centos7 ~]# yum install -y python-pip
# 安装 docker-compose
[root@centos7 ~]# pip install docker-compose
# 安装 git
[root@centos7 ~]# yum install -y git
# 查看 docker-compose 版本号
[root@centos7 ~] docker-compose -version
# docker compose卸载
sudo rm /usr/local/bin/docker-compose
1.2.2 方式二
yum install epel-release
yum install -y python-pip
pip install docker-compose
yum install git
1.3 harbor安装
GitHub地址:https://github.com/goharbor/harbor/releases
wget https://github.com/goharbor/harbor/releases/download/v1.9.3/harbor-offline-installer-v1.9.3.tgz
下载后解压:
tar -xvf harbor-offline-installer-v1.9.0.tgz
修改harbor.yml:
hostname: example.xxxx.cn # 写你自己的网址或IP,公网访问要写公网IP
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /root/harbor/Nginx/1.crt
private_key: /root/harbor/Nginx/2.key
harbor_admin_password: Harbor12345 # 管理员密码建议修改
database:
password: root123 # 数据库密码也建议修改
执行安装:
sh ./install.sh
1.4 常用命令
# 停止harbor
$ sudo docker-compose stop
# 启动harbor
$ sudo docker-compose start
# 重新配置harbor
$ sudo docker-compose down -v
$ vim harbor.yml
$ sudo prepare
$ sudo docker-compose up -d
# 删除Harbor的容器,同时将镜像数据和Harbor的数据库文件保留在文件系统中:
$ sudo docker-compose down -v
# 删除Harbor的数据库和镜像数据以进行重新安装:
$ rm -r /data/database
$ rm -r /data/registry
# 如果要一起安装Notary,Clair和图表存储库服务,则应在prepare命令中包括所有组件:
$ sudo docker-compose down -v
$ vim harbor.yml
$ sudo prepare --with-notary --with-clair --with-chartmuseum
$ sudo docker-compose up -d
二、Harbor使用
2.1 项目
以项目的维度划分镜像,可以理解为镜像组,相同镜像的不同版本可以放在一个项目里,同样项目里有完成的仓库、成员、标签、日志的管理。
2.2 系统管理
- 用户管理 用于操作用户的增删、密码重置
- 仓库管理 拉取其他服务器镜像到本地
- 同步管理 可定时去拉取最新镜像
三、镜像推送和拉取
镜像推送和拉取
#从私服拉取镜像 docker pull 私服地址/仓库项目名/镜像名:标签
镜像推送
#推送
docker login 服务器地址:port
#镜像打标签 ,要重新打标签,标签默认是官网地址
docker tag 镜像名:标签 私服地址/仓库项目名/镜像名:标签
#推送指令
docker push 私服地址/仓库项目名/镜像名:标签
四、坑点
4.1 上传项目时修改http请求为https
在我们上传项目的时候可能会出现一些问题:
docker login 10.0.86.193
Username: admin
Password:
Error response from daemon: Get https://10.0.86.193/v1/users/: dial tcp 10.0.86.193:443: getsockopt: connection refused
在我们进行登录上传代码的时候,会报出这样的错误
这是因为docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的时就会报错。
解决办法:
如果是在Harbor本机登录可以这样做如下解决
在/etc/docker/daemon.json 加上如下内容(注意是json字符串)
{
"insecure-registries": [
"10.0.86.193"
]
}
打开docker-compose.yml添加如下内容,注意前边的空格
然后我们执行docker-compose stop
./install.sh
如果是远程登录的话,也会出现这个错误
查找Docker的服务文件:登录到已经安装Docker的服务器,输入 systemctl status docker查看Docker的service文件
编辑docker.service文件:在ExecStart处添加 –insecure-registry 参数。
远程也可直接通过以下方式解决:
vim /etc/docker/daemon.json
# 增加一个daemon.json文件
{ "insecure-registries":["192.168.1.100:port"] }
# 此处port指的是harbor服务的port,不知为何,看到很多人设置的是5000端口,我测试后并不好使,然后改为harbor服务端口,原本是80,我本地调试改为81,即可远程登录私服。
# harbor配置文件,harbor.yml,查看其中的http,port。
重启docker服务
systemctl daemon-reload
systemctl restart docker
Docker私服搭建--Harbor的更多相关文章
- docker私服搭建nexus3
docker私服搭建有官方的registry镜像,也有改版后的NexusOss3.x,因为maven的原因搭建了nexus,所以一并将docker私服也搭建到nexus上. nexus的安装过程就单独 ...
- Docker私服仓库Harbor安装
Harbor安装那里还是很简单,就是在Docker Login那里掉坑里去了,搞半天,写博客的时候,又重新安装了一遍 1.准备两台服务器 centos7 harbor 10.19.46.15 clie ...
- Docker 私服
目录 什么是 Docker 私服? Docker 私服搭建 上传镜像至私服 从私服拉取镜像 什么是 Docker 私服? Docker 官方的 Docker Hub 是一个用于管理公共镜像的仓库,我们 ...
- 搭建Harbor企业级docker仓库
搭建Harbor企业级docker仓库 一.Harbor简介 1.Harbor介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如 ...
- docker私库harbor的搭建
1.文件下载 # wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.1.tgz 安装官网 ...
- Docker镜像仓库Harbor之搭建及配置
目录 Harbor介绍环境.软件准备Harbor服务搭建Harbor跨数据复制配置FAQ1.Harbor 介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的 ...
- docker搭建harbor私有镜像库
创建harbor私有镜像库 一.部署准备: harbor软件包 在部署节点上: 1)解压harbor的软件包将harbor目录下所有文件发送到/opt/目录下 tar zxvf harbor- ...
- 使用nexus搭建一个docker私服
使用nexus搭建docker私服 一.需求: 二.实现步骤 1.编写`docker-compose`文件,实现`nexus`的部署 2.修改/usr/lib/systemd/system/docke ...
- 使用registry搭建docker私服仓库
使用registry搭建docker私服仓库 一.拉取 registry镜像 二.根据镜像启动一个容器 1.创建一个数据卷 2.启动容器 三.随机访问一个私服的接口,看是否可以返回数据 四.推送一个镜 ...
随机推荐
- Arduino IDE 开发ESP-01/ESP8266-01读取DHT11温度湿度传感器
引脚接线: DHT11---ESP8266-01 Singnal--IO2, GND----GND, VCC----VCC DHT11引脚说明: ESP8266-01/ESP8266-01S引脚说明: ...
- redo log 有什么作用?
mysql 为了提升性能不会把每次的修改都实时同步到磁盘,而是会先存到Boffer Pool(缓冲池)里头,把这个当作缓存来用.然后使用后台线程去做缓冲池和磁盘之间的同步. 那么问题来了,如果还没来的 ...
- Markdown高级使用之流程图
流程图在Markdown中的的表现形式就是代码块,代码块语言标记为mermaid.主要内容大体分为:方向.节点.节点间的连接关系,下面就围绕这三个点来整理. mermaid支持流程图.甘特图和时序图, ...
- 微信小程序--仿微信小程序朋友圈Pro(内容发布、点赞、评论、回复评论)
微信小程序--仿微信小程序朋友圈Pro(内容发布.点赞.评论.回复评论) 项目开源地址M朋友圈Pro 求个Star 项目背景 基于原来的开源项目 微信小程序仿朋友圈功能开发(发布.点赞.评论等功能 ...
- Hive数据导入Hbase
方案一:Hive关联HBase表方式 适用场景:数据量不大4T以下(走hbase的api导入数据) 一.hbase表不存在的情况 创建hive表hive_hbase_table映射hbase表hbas ...
- jupyter安装插件Nbextensions,实现代码提示功能(终极方法)
jupyter安装插件,实现代码提示功能 第一步 pip install jupyter_contrib_nbextensions -i https://mirrors.tuna.tsinghua.e ...
- TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...
- WPF TreeView Indent 减少节点的缩进
www.swack.cn - 原文链接:WPF TreeView Indent 减少节点的缩进 问题 最近一个需求,需要在界面中实现Windows资源管理器TreeView的界面.但是我发现,我做出的 ...
- js如何替换字符串中匹配到多处中某一指定节点?
抛出一个问题,如图,搜索关键字,匹配到四处,那我鼠标放在第二处,我想把它变个颜色,该怎么实现呢?回到文章的标题,js如何替换字符串中匹配到多处中某一指定节点? 字符串的替换,我们首先想到的一个属性是r ...
- 【MyBatis】MyBatis 多表操作
MyBatis 多表操作 文章源码 一对一查询 需求:查询所有账户信息,关联查询下单用户信息. 注意:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询.如果从用户 ...