最近很多小伙伴都在问Harbor基础和harbor教程这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展120.部署harbor以及使用harbor、Centos7安装Docker镜
最近很多小伙伴都在问Harbor 基础和harbor教程这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展120.部署harbor以及使用harbor、Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)、Docker 之分布式仓库 Harbor及Harbor高可用性、Harbor等相关知识,下面开始了哦!
本文目录一览:- Harbor 基础(harbor教程)
- 120.部署harbor以及使用harbor
- Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)
- Docker 之分布式仓库 Harbor及Harbor高可用性
- Harbor
Harbor 基础(harbor教程)
harbor:
Harbor 是构建企业级私有 docker 镜像的仓库的开源解决方案,它是 Docker Registry 的更高级封装,它除了提供友好的 Web UI 界面,角色和用户权限管理,用户操作审计等功能外,它还整合了 K8s 的插件 (Add-ons) 仓库,即 Helm 通过 chart 方式下载,管理,安装 K8s 插件,而 chartmuseum 可以提供存储 chart 数据的仓库【注:helm 就相当于 k8s 的 yum】。另外它还整合了两个开源的安全组件,一个是 Notary,另一个是 Clair,Notary 类似于私有 CA 中心,而 Clair 则是容器安全扫描工具,它通过各大厂商提供的 CVE 漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。
补充:
Nexus 是 Maven 仓库管理器,如果你使用 Maven,你可以从 Maven 中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus 就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于 REST,友好的 UI 是一个 extjs 的 REST 客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的 Maven 仓库管理器。
Notary 是一个允许任何人信任任意数据集合的项目。Notary 项目包括服务器和客户端,用于运行和与可信集合交互。Notary 旨在通过让人们轻松发布和验证内容,使互联网更加安全。我们经常依靠 TLS 来保护我们与 Web 服务器的通信,这本身就存在缺陷,因为服务器被攻破时可使恶意内容替代合法内容。借助 Notary,发布商可以使用保持高度安全的密钥离线签署其内容。一旦发布者准备好内容,他们可以将他们签名的可信集合推送到 Notary 服务器。消费者通过安全渠道获得了发布者的公钥,然后可以与任何 Notary 服务器或(不安全)镜像进行通信,仅依靠发布者的密钥来确定接收内容的有效性和完整性。Notary 基于 TUF 项目,一个针对软件分发和更新问题的安全通用设计。
Clair:
参考: https://blog.csdn.net/liumiaocn/article/details/76697022
通过对容器的 layer 进行扫描,发现漏洞并进行预警,其使用数据是基于 Common Vulnerabilities and Exposures 数据库 (简称 CVE), 各 Linux 发行版一般都有自己的 CVE 源,而 Clair 则是与其进行匹配以判断漏洞的存在与否,比如 HeartBleed 的 CVE 为:CVE-2014-0160。
目前 Clair 支持如下数据源:
HARBOR:
这是 VMWare 公司提供的一个 docker 私有仓库构建程序,功能非常强大.
1. 支持多租户签名和认证
2. 支持安全扫描和风险分析
3. 这次日志审计
4. 基于角色的访问控制
5. 支持可扩展的 API 和 GUI
6. Image replication between instances
7. 国际化做的很好 (目前仅支持英文和中文)
Harbor 部署:
1. 从 GitHub 上下载 Harbor 的二进制发行包.
2. 准备必要的环境:
yum install docker-ce docker-compose
3. 解压后,先编辑 harbor.cfg
vim harbor.cfg
hostname = node1.test.com
ui_url_protocol = http
max_job_workers = 3 #启动 3 个处理用户上传下载的进程,若为 4 核,3 个就是最好的。
admiral_url = NA #NA: 不自定义管理 URL
harbor_admin_password = Harbor12345 #默认的管理员密码
# 默认它会自动创建一个 mysql 容器,并设置 mysql 的 root 密码为 root123,
# 注意:从 harbor v1.7.5 以后使用的数据库默认是 postgresql
db_password = root123
# 若想让其使用外部数据库,可修改下面参数为外部数据库的地址.
db_host = postgresql
# 若启用了 --with-clair 时,注意修改 clair 的数据库密码,还有 redis 的密码,因为 clair 需要使用 redis。
clair_db_password = root123
4. 运行 install.sh , 若需要启用 harbor 的其它功能,可查看 install.sh --help
安装完成后,它会提示你访问 harbor 的地址是多少,你就可以直接在浏览器中访问这个地址了。
5. 可测试打开 harbor,并测试上传镜像。
5.1 在测试上传镜像时,需要先登录 harbor 的 Web 界面,然后创建一个项目,这个项目就相当于公司中不同的项目组,每个项目组分别管理各自的项目镜像,以便后期该项目不需要时,可直接删除该项目。
5.2 然后到 harbor 客户端,测试登录 harbor 仓库,并尝试上传镜像
5.2.1 因为这里使用了非安全的 HTTP,因此需要修改 docker 的启动参数
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --selinux-enabled=false --insecure-registry 192.168.10.154
# 若没有启用 SELinux 可设置不启用它
#--insecure-registry 即指定一个非安全的仓库,这里指定内网 harbor 地址为 192.168.10.154
# 若有多个可重复 --insecure-registry
5.2.2 测试上传镜像
~]# docker login http://192.168.10.154
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json. #这里需要注意:登录成功后,用户名密码会保存到 config.json 中。
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
~]# docker push 192.168.10.154/test1/nginx-alpine:v1 #这样就可以上传镜像到 harbor 上了。
6. 可自行查看 docker-compose.yml, install.sh 实际执行的 docker-compose 命令.
docker-compose
# 命令在运行时,会自动在当前目录下,找 docker-compose.yml 配置文件,若找到则安装里面的定义
# 来决定到哪里去找镜像,先启动那个容器,启动镜像需要挂载什么卷等。
在配置 Harbor 时,若出现问题,可结合 /var/log/harbor 中的日志文件来查看问题.
我通常会这样查看:
tail -f /var/log/harbor/*.log
Harbor 配置 HTTPS:
1. 修改 harbor.cfg
hostname = harbor.zcf.com
ui_url_protocol = https
ssl_cert = /data/docker/certs/harbor.zcf.com.crt
ssl_cert_key = /data/docker/certs/harbor.zcf.com.key
harbor_admin_password = adminpass
2. 创建证书,并放到上面定义的目录中
测试使用,可使用我用 shell 写的证书制作工具:
https://github.com/zhang75656/shell-tools/blob/master/gencret.sh
chmod +x gencret.sh
./gencret.sh --help # 可查看使用帮助。但前提是必须安装 openssl
3. 重新执行 ./install.sh 即可,这样 harbor 服务端就可以工作了.
Harbor 客户端配置:
1. 在 docker 配置目录下创建证书目录,
# 注意:证书目录是存放 harbor 服务器的证书文件.
# docker login harbor.zcf.com
# 当执行上面命令登录 harbor 时,默认 docker 会到 /etc/docker/certs.d/ 下去找 harbor.zcf.com 这个目录,看其下面是否有证书可用。
# 所以,需要将 harbor 服务器上的证书 scp 过来,放到 docker 客户端的这个目录中。
mkdir /etc/docker/certs.d/harbor.zcf.com
Harbor 通过 Systemd 管理时,所需要的 systemd 脚本参考:
[Unit]
Description=BigDisk docker-compose container starter
After=docker.service network-online.target
Requires=docker.service network-online.target
[Service]
WorkingDirectory=/[path_to_harbor] # 这里需要修改为 Harbor 的安装目录.
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/docker-compose up -d #这里需要确认,docker-compose 的路径是否与自己的系统的路径一致.
ExecStop=/usr/local/bin/docker-compose down
ExecReload=/usr/bin/docker-compose up -d
[Install]
WantedBy=multi-user.target
120.部署harbor以及使用harbor
部署harbor
在kubernetes中使用harbor
harbor是一个离线的镜像,最终会形成一个容器,跑起来。而我们把这个容器作为我们的仓库。只不过部署的时候使用docker-compose
cs架构,需要搭建一个服务器
我们要在k8s中使用这个harbor,比如我要创建一个pod,那这个pod引用的images就是从harbor这下载的。
(第9步骤开始)那此时你要在k8s中使用这个harbor,要在k8s中创建一个安全机制,让这些node节点知道这个harbor是谁,并且要知道harbor的用户及密码是谁
Habor是由VMWare中国团队开源的容器镜像仓库。支持web浏览。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,水平扩展,同步,AD/LDAP集成以及
审计日志等。
一. 手动部署harbor
1. 下载最新的docker-compose二进制文件
# curl -L https://github.com/docker/compose/releases/download/1.22.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
# chmod +x /usr/bin/docker-compose
2. 下载harbor离线安装包
github地址 https://github.com/goharbor/harbor/releases #下载的是1.6的
# wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz #linux上下载太慢了。去浏览器上下载1.6的
# tar zxvf harbor-offline-installer-v1.6.0-rc3.tgz
3. 准备ca证书(建议大家购买一个便宜的域名,并去申请一个免费的ssl证书)
如果不想购买域名,那就自己手动生成ca证书吧,可以参考这个文档
(https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/key.md )
免费ssl证书 https://freessl.org/
在安装他之前要准备一套ca证书。在这有提供一个harbor.yuankedeu.com这个域名的证书(链接:https://pan.baidu.com/s/1FWNWKaGmo9jUql9cgo-1PQ 提取码:e4oh),可以直接用,下载这个包,里面有key文件还有crt文件。如果想用自己的域名,就去购买一个便宜的域名,到 https://freessl.org/去申请一个免费的ca证书(可以用一年)。线上的话更定是要购买合格的证书
不想购买就手动生成去(参考上面那个链接文档手动生成ca证书),但是这种不合规,访问的时候需要让浏览器把它加入白名单,才可以正常访问
4. 安装harbor
# cd harbor
编辑配置文件
# vim harbor.cfg
1)定义hostname(如 harbor.yuankeedu.com)
2)定义ui_url_protocol为https
3)定义ssl_cert/ssl_key
4)定义harbor_admin_password
安装
# sh install.sh //自动安装完成
#docker-compose down 可以将全部的容器关闭
#docker-compose up -d 将全部的容器开启,-d后台启动
5. 访问
https://harbor.yuankeedu.com #要写host,后者访问ip
admin 默认密码为 Harbor12345 #实验中修改的密码为Harbor-abc1
6. 创建项目
会在这个项目了添加一个镜像,把这个镜像搞过来
7. 拉取公共镜像
docker pull tomcat
docker tag tomcat harbor.yuankeedu.com/aminglinux/tomcat:latest #axin实验的时候需要执行这一步才可以
8. 把tomcat镜像推送到harbor
# docker login https://harbor.yuankeedu.com
输入用户名和密码
# docker push harbor.yuankeedu.com/aminglinux/tomcat:latest #执行此步骤就可以将镜像推上去了
扩展: 镜像复制,参考 https://blog.csdn.net/aixiaoyang168/article/details/73549898
问题: x509: certificate signed by unknown authority
1) echo -n | openssl s_client -showcerts -connect harbor.yuankeedu.com:443 2>/dev/null | sed -ne ''/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'' >> /etc/ssl/certs/ca-bundle.trust.crt
2)systemctl restart docker
3)docker-compose up -d
如果以上步骤无法解决该问题,尝试使用以下步骤:
# mkdir -p /etc/docker/certs.d/harbor.yuankeedu.com
# vim /etc/docker/certs.d/harbor.yuankeedu.com/ca.crt //内容如下(注意,这个只针对harbor.yuankedu.com域名的,这个其实就是免费的ca证书压缩包里的ca文件内容)
-----BEGIN CERTIFICATE-----
MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO
MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL
ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS
U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8
Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa
e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO
JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA
zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK
ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe
3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K
AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD
AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG
AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj
ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg
hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t
L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233
lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ
DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP
ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F
UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C
qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY
RmE=
# chmod 400 /etc/docker/certs.d/harbor.yuankeedu.com/ca.crt
# systemctl restart docker
二. 在kubernetes中使用harbor
9. 在kubernetes中使用harbor
以下操作在master上执行:
1)创建secret #可理解为存放密码的媒介,我们可以把harbor对应的用户名和密码存放在这个里面,之后我们所有的节点就都可以使用用户名和密码了
# kubectl create secret docker-registry my-secret --docker-server=harbor.yuankeedu.com --dockerusername=admin --docker-password=Harbor12345 #my-secret名字自定义
创建完成后,可以用以下命令查看:
# kubectl get secret
2)定义一个pod
首先,需要在harbo私有仓库里推送一个httpd的镜像,地址为harbor.yuankeedu.com/aminglinux/httpd:latest
# docker pull httpd #提前推到harbor上去,好下一步引用下载地址
# docker tag httpd harbor.yuankeedu.com/aminglinux/httpd:latest
# docker login https://harbor.yuankeedu.com
# docker push
然后再定义yaml文件
# vim httpd.yaml //内容如下
apiVersion: v1
kind: Pod
metadata:
name: httpd-pod
spec:
containers:
- image: harbor.yuankeedu.com/aminglinux/httpd:latest #此处的下载地址就是harbor
name: httpd-pod
imagePullSecrets: #在这就引用了secret,此处如果不引用。上面的images是没办法下载的
- name: my-secret
# kubectl create -f httpd.yaml
# kubectl describe pod httpd-pod //查看pod创建过程的信息,可能会存在问题
如果创建pod的时候依然出现509的错误,是因为在分配节点的时候,这个几点上并没有认证证书,就是第8步骤,ca文件要写入到哪个文件里去。所以要在所有的节点上,认证ca证书
总结:
首先要创建secret(登记harbor服务器地址、用户名、密码。可创建多个)
然后创建pod(或者创建rc或者deploy)的时候,指定这个参数(对应的用户的secret)
二. 利用kubeasz项目部署(1.6.0版本的harbor并未实验成功,大家可以尝试做一下)
1)下载docker-compose二进制文件,改名后把它放到项目/etc/ansible/bin/目录下
wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /etc/ansible/bin/docker-compose
2)下载habor安装文件
github地址 https://github.com/goharbor/harbor/releases
wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz
3)由于ansible解压的一些问题,需要将官方的tgz包,重新打包为zip包
tar zxf harbor-offline-installer-v1.6.0-rc3.tgz
zip -r harbor-offline-installer-v1.6.0-rc3.zip harbor
mv harbor-offline-installer-v1.6.0-rc3.zip /etc/ansible/down/harbor-offline-installer-v1.6.0.zip
4)在deploy节点编辑/etc/ansible/hosts文件
5)在deploy节点执行
vim /etc/ansible/roles/harbor/defaults/main.yml //修改版本号
Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)
Harbor 详细介绍
Harbor安装指南
Harbor官网配置CA认证
Kubernetes Harbor安装教程
1、容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是非常必要的。
2、Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能,欢迎使用和反馈意见。
3、作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
1)基于角色的访问控制
用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
2)镜像复制
镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
4)AD/LDAP 支持
Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
5)审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
6)国际化
已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
7)RESTful API
RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
8)部署简单
提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备
Harbor 架构介绍
Harbor在架构上主要由五个组件构成:
1、Proxy:
Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
2、Registry:
负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。
3、Core services:
这是Harbor的核心功能,主要提供以下服务:
1)UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。
2)webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。
3)token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
4、Database:
为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
5、Log collector:
为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
各个组件之间的关系如下图所示:
实验环境:
系统版本:centos7x3.10.0-514.el7.x86_64
Docker版本:1.13.1(yum安装)
harbor版本:harbor-offline-installer-v1.5.3.tgz(离线版)
注:由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。
关闭防火墙并禁止开机自启
systemctl stop firewalld.service
systemctl disable firewalld
关闭selinux
sed -i ''s/SELINUX=enforcing/SELINUX=disabled/g'' /etc/sysconfig/selinux
修改主机名
vi /etc/hostname
harbor.123.com
域名绑定IP
vi /etc/hosts
192.168.152.170 harbor.123.com
重启 reboot
【温馨提示:上面标红几个步骤一定要注意设置了,否则后面会访问不通】
插播一条排查问题的方法,如果访问不通,可以安装nmap,检查下服务器露出的都有哪些端口
#安装nmap
yum -y install nmap
#该ip露出的端口
nmap 43.55.42.25
如果关了前面的防火墙,则会露出443
安装harbor(IP:192.168.152.170)
1、安装harbor依赖环境
1)安装docker
yum -y install docker
注:建议安装最新稳定版docker!
2)安装docker-compose
yum -y install docker-compose
注:如果安装不上就先安装epel-release源,然后安装docker-compose!
3)依赖软件安装
yum install -y yum-utils device-mapper-persistent-data lvm2
2、下载离线安装包harbor-offline-installer-v1.5.3.tgz
1)使用下载命令wget或者aria2c下载harbor
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.3.tgz
注:因为我这里网络不太好所以使用aria2c下载的,以上截图表示下载成功!
2)解压harbor到本地
tar zxf harbor-offline-installer-v1.5.3.tgz
3)将解压目录移动到/data目录
//创建harbor数据存储目录
mkdir /data
注:可能有的童鞋不太理解这一步的意思,简单来说就是harbor默认的数据存储目录就是/data目录,所以我先创建好,并将harbor解压目录移动到这里,当然如果不创建,后期启动harbor时也会自动创建的!
//移动harbor解压目录
mv harbor /data/
注:这一步操作是为了方便管理和防止误删除(可做可不做)!
【我本人不喜欢 /data 目录,很乱,对Harbor默认的数据存储路径从 /data 调整为 /data/harbor-data了,相当于所有后面执行官了./install.sh 生成的文件统一放在指定路径管理】
调整Harbor默认数据存储路径,修改内容如下:
1.harbor.cfg
修改"secretkey"的路径
#The path of secretkey storage
secretkey_path = /data/harbor-data # 默认是 /data
2.docker-compose.yml
修改原先所有默认为"/data"的volume的挂载路径
version: ''2''
services:
log:
image: goharbor/harbor-log:v1.6.1
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor/:/var/log/docker/:z
- ./common/config/log/:/etc/logrotate.d/:z
ports:
- 127.0.0.1:1514:10514
networks:
- harbor
registry:
image: goharbor/registry-photon:v2.6.2-v1.6.1
container_name: registry
restart: always
volumes:
- /data/harbor-data/registry:/storage:z
- ./common/config/registry/:/etc/registry/:z
networks:
- harbor
environment:
- GODEBUG=netdns=cgo
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
postgresql:
image: goharbor/harbor-db:v1.6.1
container_name: harbor-db
restart: always
volumes:
- /data/harbor-data//database:/var/lib/postgresql/data:z
networks:
- harbor
env_file:
- ./common/config/db/env
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "postgresql"
adminserver:
image: goharbor/harbor-adminserver:v1.6.1
container_name: harbor-adminserver
env_file:
- ./common/config/adminserver/env
restart: always
volumes:
- /data/harbor-data/config/:/etc/adminserver/config/:z
- /data/harbor-data/secretkey:/etc/adminserver/key:z
- /data/harbor-data/:/data/:z
networks:
- harbor
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "adminserver"
ui:
image: goharbor/harbor-ui:v1.6.1
container_name: harbor-ui
env_file:
- ./common/config/ui/env
restart: always
volumes:
- ./common/config/ui/app.conf:/etc/ui/app.conf:z
- ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z
- ./common/config/ui/certificates/:/etc/ui/certificates/:z
- /data/harbor-data/secretkey:/etc/ui/key:z
- /data/harbor-data/ca_download/:/etc/ui/ca/:z
- /data/harbor-data/psc/:/etc/ui/token/:z
networks:
- harbor
depends_on:
- log
- adminserver
- registry
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
jobservice:
image: goharbor/harbor-jobservice:v1.6.1
container_name: harbor-jobservice
env_file:
- ./common/config/jobservice/env
restart: always
volumes:
- /data/harbor-data/job_logs:/var/log/jobs:z
- ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z
networks:
- harbor
depends_on:
- redis
- ui
- adminserver
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
redis:
image: goharbor/redis-photon:v1.6.1
container_name: redis
restart: always
volumes:
- /data/harbor-data/redis:/var/lib/redis
networks:
- harbor
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "redis"
proxy:
image: goharbor/nginx-photon:v1.6.1
container_name: nginx
restart: always
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
ports:
- 80:80
- 443:443
- 4443:4443
depends_on:
- postgresql
- registry
- ui
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
networks:
harbor:
external: false
改完后可通过grep检查下是否都改全了
cat docker-compose.yml | grep harbor-data
完成上述修改后执行下述命令重新部署容器即可:
./prepare
docker-compose up -d
//创建CA证书存放目录
mkdir /data/cert
注:可以在这个目录里创建证书!
创建CA证书
1、创建CA的证书
//进入存放证书目录
cd /data/cert/
//创建自己的CA证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
注:因为出于安全的考虑,所以强烈建议搭建基于https的harbor,那么就需要添加ca证书!
2、生成CA证书签名请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.123.com.key -out harbor.123.com.csr
3、生成注册主机的证书
方式一:使用域名生成注册主机证书
openssl x509 -req -days 365 -in harbor.123.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.123.com.crt
注:以上这步操作是和wangfeiyu.com.csr在同一目录操作的,如果不在同一目录,需要写绝对路径,否则可能会报错!
方式二:使用IP生成注册主机证书
//echo subjectAltName = IP:192.168.152.170 > extfile.cnf
//openssl x509 -req -days 365 -in wangfeiyu.com.csr -CA ca.crt -CAkey
ca.key -CAcreateserial -extfile extfile.cnf -out harbor.123.com.crt
注:执行以上两条命令即可实现IP注册主机证书!
4、编辑harbor配置文件
编辑harbor.cfg文件
vi /data/harbor/harbor.cfg
#hostname设置访问地址。可以使用ip、域名、主机名,不可以设置为127.0.0.1或localhost。(如果部署的是备份库,填写ip而不是域名,否则会导致仓库管理连接失败,host无法识别原因不明)
hostname = harbor.123.com
#访问协议。默认是http,如果搭建https的仓库就改为https。
ui_url_protocol = https
#可选的https证书配置地址
ssl_cert = /root/cert/bakreg.cn.crt
ssl_cert_key = /root/cert/bakreg.cn.key
#用于在复制策略中加密或解密远程注册表的密码的密钥路径。secretkey_path不需要修改。如果必须修改它,你需要在/root/harbor/docker-compose.yml中手动调整路径,因为它们是硬编码。
secretkey_path = /data
#邮件设置,发送重置密码邮件时使用
#email_identity作为用户名
email_identity =
email_server = 邮箱的smtp服务器域名
email_server_port = 25
email_username =
email_password =
email_from =
email_ssl = false
email_insecure = false
#管理员admin的登录密码。默认是Harbor12345
harbor_admin_password = Harbor12345
#认证方式。默认是db_auth,支持多种认证方式,如数据库认证(db_auth)、LADP(ldap_auth)。
auth_mode = db_auth
#LDAP认证时配置项(这项可以登录后配置也可以)。
ldap_url = # LDAP URL
ldap_searchdn = # LDAP 搜索DN
ldap_search_pwd = # LDAP 搜索DN的密码
ldap_basedn = # LDAP 基础DN
ldap_filter = # LDAP 过滤器
ldap_uid = # LDAP 用户uid的属性
ldap_scope = 2
ldap_timeout = 5
#是否开启注册。on开启,off关闭。
self_registration = off
#Token有效时间。默认30分钟。
token_expiration = 30
#标记用户创建项目权限控制。默认是everyone(允许所有人创建),也可以设置为adminonly(只能管理员才能创建)
project_creation_restriction = everyone
注:暂时先更改这几行即可启动,其他功能按照需求更改!
5、启动harbor服务
1)启动docker并设置开机自启
systemctl start docker
systemctl enable docker
2)进入harbor解压目录
cd /data/harbor/
3)安装harbor
./install.sh
注:以上截图说明harbor的https协议加密成功!
3)harbor的启动和关闭方式
//关闭harbor服务(先进入harbor目录)
docker-compose stop
//开启harbor服务(先进入harbor目录)
docker-compose up -d
6、验证harbor服务是否正常运行(建议使用Firefox浏览器测试)
1)访问地址:https://harbor.123.com
注:有童鞋可能不理解为啥不用IP地址访问,因为我们是针对域名做的https证书,所以只能使用域名访问才能使用自签的证书!但是问题又来了,为啥浏览器会这样呢?原因是windows没有针对这个域名做域名解析,怎么才能让他访问到呢?
设置方式:(windows系统)
//打开windows路径
C:\Windows\System32\drivers\etc
//点击这个特殊的hosts文件,并用记事本方式打开
注:将harbor服务器的域名和IP记录到windows系统中,即可实现域名访问网页!
2)再访问这个地址:https://harbor.123.com
注:以上截图访问方式使用的是https加密访问但是需要我们将证书导入浏览器才行!
导入方式:
//点击高级
//点击添加列外
//点击确认安全列外
注:以上截图已经可以访问到网页,说明nginx加密成功或者证书导入成功!其他的浏览器导入证书方式不一样,但是超级简单,自行百度即可!
3)使用默认用户密码登陆
//输入用户名密码
注:默认的用户名admin,密码Harbor12345。
//点击登陆
Harbor服务端上传下载镜像
1、创建普通上传镜像用户
注:创建用户时按照密码复杂要求设置密码!
2、harbor服务器本地登陆
docker login harbor.123.com
报错:Error response from daemon: Get https://harbor.123.com/v1/users/: x509: certificate signed by unknown authority
解决方式
1、centos7系统以上报错的原因是因为自签的证书没有加入到系统级别信任,只需要将harbor.123.com.crt拷贝到/etc/pki/ca-trust/source/anchors/reg.你的域名.crt,然后需要执行命令update-ca-trust,最后重启harbor和docker即可!
cp harbor.123.com.crt /etc/pki/ca-trust/source/anchors/reg.harbor.123.com.crt
2、ubunt16.04系统以上报错的原因是因为自签的证书没有加入到系统级别信任,只需要将harbor.123.com.crt拷贝到/usr/local/share/ca-certificates/reg.你的域名.crt,然后执行命令update-ca-certificates,最后重启harbor和docker即可!
3、为镜像打标记
docker tag 原镜像名 harbor.123.com /项目名/打标记的镜像名
注:如果是普通用户推送镜像,切记需要创建项目,不然上传给默认的library项目没有权限,只有admin用户有推送library项目的权利。
4、推送镜像到harbor仓库
//先登录镜像库
docker login harbor.123.com
Username: admin
Password:
//推送镜像到仓库
docker push harbor.123.com/library/tomcat:v1
注:如果是普通用户推送镜像,那么以上的library项目名换成自己的项目名即可!
假设建的用户为,helen,则需要在仓库新建一个名为 helen 的项目,否则会推送失败
5、拉取镜像
//删除打标记的镜像
docker rmi -f harbor.123.com/library/tomcat:v1
//拉取仓库的tomcat镜像
docker pull 镜像的完整路径
注:可能有童鞋会说,如果不知道怎么填写完整路径怎么办,也不知道怎么下载镜像的,那么就登录上网页harbor,然后点击你要下载的那个镜像后边pull命令提醒,例如:
6、docker退出harbor登陆
docker logout harbor的域名
Harbor客户端上传下载镜像
由于通过openssl创建的是不可信的,直接拉取或登录时会报“x509: certificate signed by unknown authority”,故需要让客户机信任该证书。
1、从CA服务器将证书拷贝到客户端/root/目录下
scp /data/cert/harbor.123.com.crt root@192.168.152.91:/root/
2、客户端将证书追加到自己的ca-bundle.crt认证文件中
cat harbor.123.com.crt >> /etc/pki/tls/certs/ca-bundle.crt
3、客户端/etc/hosts文件里追加服务端的IP和域名
echo "192.168.152.170 harbor.123.com" >>/etc/hosts
4、关闭harbor服务
//进入harbor目录
cd /data/harbor/
//关闭harbor服务
docker-compose stop
5、重启docker
systemctl restart docker
6、启动harbor服务
//进入harbor目录
cd /data/harbor/
//启动harbor服务
docker-compose up –d
7、docker登陆harbor
docker login harbor.123.com
注:废话就不多说了,其他的打标记、上传、下载,方式都一样!
8、相关问题
Error: Status 404 trying to push repository test/app: "{\"timestamp\":1555033311968,\"status\":404,\"error\":\"Not Found\",\"message\":\"No message available\",\"path\":\"/v1/repositories/test/app/\"}"
这个问题,需要重新对前端页面和后台配置,做https证书
案例:普通Linux客户端应该怎么做才能从Harbor服务器拉去镜像?
需要两步:
1、vi /etc/hosts 新增Harbor服务器的ip和域名的配置
2、解决前面说的509问题
Error response from daemon: Get https://hub.**.cn/v1/users/: x509: certificate signed by unknown authority
处理方法:
[root@test cert]# cat hub.***.cn.crt >> /etc/pki/tls/certs/ca-bundle.crt
[root@test cert]# systemctl restart docker
[root@test cert]# docker login hub.***.cn
Username: xxx
Password:
Login Succeeded
Harbor垃圾回收(物理删除)
无论通过接口或者web界面删除镜像,都只是软删除,虽然查询不到,但是镜像文件还是保存在磁盘上,因此需要通过以下方法进行垃圾回收,清理释放磁盘
#进入导harbor yaml文件所在目录
cd /usr/local/src/harbor
#停止harbor
docker-compose stop
#使用清理镜像进行垃圾回收
#使用--dry-run 参数进行预览,不使用则进行清理
docker run -it --name gc --rm --volumes-from registry vmware/registry:1.5.3-photon garbage-collect /etc/registry/config.yml
#重新启动harbor
docker-compose start
建议的方法是,先在web界面全部删除,然后再执行上面gc的方法
Docker 之分布式仓库 Harbor及Harbor高可用性
Docker 之分布式仓库 Harbor
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由VMware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker distribution。作为一个企业级私有Registry服务器,Harbor 提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜
像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控,另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
Harbor 组成
#harbor是由很多容器组成实现完整功能
[root@harbor1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b18677878280 goharbor/Nginx-photon:v1.7.6 "Nginx -g 'daemon of…" 10 minutes ago Up 10 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp Nginx
94641cfdb140 goharbor/harbor-portal:v1.7.6 "Nginx -g 'daemon of…" 10 minutes ago Up 10 minutes (healthy) 80/tcp harbor-portal
d26a3568510c goharbor/harbor-jobservice:v1.7.6 "/harbor/start.sh" 10 minutes ago Up 10 minutes harbor-jobservice
379e870217ec goharbor/harbor-core:v1.7.6 "/harbor/start.sh" 10 minutes ago Up 10 minutes (healthy) harbor-core
4e25b286cf9e goharbor/harbor-adminserver:v1.7.6 "/harbor/start.sh" 10 minutes ago Up 10 minutes (healthy) harbor-adminserver
ba8c9ff9f266 goharbor/redis-photon:v1.7.6 "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 6379/tcp redis
3a98dd13af8c goharbor/harbor-db:v1.7.6 "/entrypoint.sh post…" 10 minutes ago Up 10 minutes (healthy) 5432/tcp harbor-db
44b6646b5f21 goharbor/registry-photon:v2.6.2-v1.7.6 "/entrypoint.sh /etc…" 10 minutes ago Up 10 minutes (healthy) 5000/tcp registry
f225f5977ed3 goharbor/harbor-registryctl:v1.7.6 "/harbor/start.sh" 10 minutes ago Up 10 minutes (healthy) registryctl
cc2307d0c46c goharbor/harbor-log:v1.7.6 "/bin/sh -c /usr/loc…" 10 minutes ago Up 10 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
(1)Proxy: 对应启动组件Nginx。它是一个Nginx反向代理,代理Notary client(镜像认证)、Dockerclient(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务。
(2)UI(Core Service): 对应启动组件harbor-ui。底层数据存储使用MysqL数据库,主要提供了四个子功能:
①、UI: 一个web管理页面ui。
②、API: Harbor暴露的API服务
③、Auth: 用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现
④、Token服务(上图中未体现): 负责根据用户在每个project中的role来为每一个dockerpush/pull命令发布一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token。
(3)Registry: 对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token。
(4)Admin Service: 对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置。
(5)Job Sevice: 对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
(6)Log Collector: 对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起。
(7)DB: 对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的Metadata数据。
1、实验环境准备
harbor服务器 10.0.0.47 centos7
harbor服务器 10.0.0.57 centos7
harbor客户端 10.0.0.100 Ubuntu
harbor客户端 10.0.0.88 centos8
四台主机都安装docker,步骤省略
2、先安装docker compose
安装docker compose
Ubuntu安装方法
#方法1: 通过pip安装,版本较新docker_compose-1.25.3,推荐使用
[root@ubuntu1804 ~]#apt -y install python-pip
[root@ubuntu1804 ~]#pip install docker-compose
[root@ubuntu1804 ~]#docker-compose --version
docker-compose version 1.25.3, build unkNown
#方法2: 直接从github下载安装对应版本
#参看说明: https://github.com/docker/compose/releases
curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-
compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
#方法3: 直接安装,版本较旧docker-compose-1.17.1-2,不推荐使用
[root@ubuntu1804 ~]#apt -y install docker-compose
[root@ubuntu1804 ~]#docker-compose --version
docker-compose version 1.17.1, build unkNown
harbor1执行命令,harbor2重复执行
[root@harbor1 ~]# yum -y install python-pip
[root@harbor1 ~]# pip install docker-compose
[root@harbor1 ~]# pip install --upgrade pip #centos7安装compose可能会报错,需要执行此命令
[root@harbor1 ~]# docker-compose --version
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is Now deprecated in cryptography, and will be removed in a future release.
from cryptography.hazmat.backends import default_backend
docker-compose version 1.26.2, build unkNown
3、下载Harbor安装包并解压缩
以下使用 harbor 稳定版本1.7.6 安装包
[root@harbor1 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.6.tgzls
解压缩离线包
[root@harbor1 ~]#mkdir /apps
[root@harbor1 ~]#tar xvf harbor-offline-installer-v1.7.6.tgz -C /apps/
4、编辑配置文件 harbor.cfg
两个服务器端都执行
[root@harbor1 ~]#vim /apps/harbor/harbor.cfg
#只需要修改下面两行
hostname = 10.0.0.101 #修改此行,指向当前主机IP 或 FQDN
harbor_admin_password = 123456 #修改此行指定harbor登录用户admin的密码,默认用户/密码:admin/Harbor12345
#可选项
ui_url_protocol = http #默认即可,如果修改为https,需要指定下面证书路径
ssl_cert = /data/cert/server.crt #默认即可,https时,需指定下面证书文件路径
ss_cert_key = /data/cert/server.key #默认即可,https时,需指定下面私钥文件路径
5、运行 harbor 安装脚本
两个服务器端都执行
[root@harbor1 ~]# yum -y install python
[root@harbor1 ~]# /apps/harbor/install.sh
6、实现开机自动启动 harbor
方法1: 通过service文件实现
[root@harbor ~]#vim /lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
[root@harbor ~]#systemctl daemon-reload
[root@harbor ~]#systemctl enable harbor
方法2: 通过 rc.local实现
[root@harbor ~]#cat /etc/rc.local
#!/bin/bash
cd /apps/harbor
/usr/bin/docker-compose up
[root@harbor ~]#chmod +x /etc/rc.local
7、登录 harbor 主机网站
用浏览器访问: http://10.0.0.47/
用户名: admin
密码: 即前面harbor.cfg中指定的密码
8、使用单主机 harbor
8.1、建立项目
harbor上必须先建立项目,才能上传镜像
8.2、命令行登录 harbor
[root@ubuntu1804 ~]#vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 10.0.0.47 --insecure-registry 10.0.0.57 #添加允许登录的仓库IP地址
[root@ubuntu1804 ~]#systemctl daemon-reload
[root@ubuntu1804 ~]#systemctl restart docker
[17:39:48 root@Ubuntu ~]#docker login 10.0.0.47
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
#查看进程是否添加上面设置
[17:40:31 root@Ubuntu ~]#ps aux | grep dockerd
root 2085 0.4 8.3 828156 82424 ? Ssl 17:39 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 10.0.0.47 --insecure-registry 10.0.0.57
root 2255 0.0 0.1 13136 1036 pts/0 S+ 17:41 0:00 grep --color=auto dockerd
8.3、给本地镜像打标签并上传到harbor
修改 images 的名称,不修改成指定格式无法将镜像上传到 harbor 仓库
格式为:
Harbor主机IP/项目名/image名字:版本
范例:
#上传镜像前,必须先登录harbor
[18:52:10 root@Ubuntu ~]#docker tag d6e46aa2470d 10.0.0.47/example/alpine:v1.0
[18:58:25 root@Ubuntu ~]#docker images
10.0.0.47/example/alpine v1.0 d6e46aa2470d 4 weeks ago 5.57MB
[18:58:39 root@Ubuntu ~]#docker push 10.0.0.47/example/alpine:v1.0
The push refers to repository [10.0.0.47/example/alpine]
ace0eda3e3be: Pushed
v1.0: digest: sha256:d7342993700f8cd7aba8496c2d0e57be0666e80b4c441925fc6f9361fa81d10e size: 528
8.4、下载harbor的镜像
下载前必须修改docker的service 文件,加入harbor服务器的地址才可以下载
范例:
[root@Centos8 ~]#vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 10.0.0.47 --insecure-registry 10.0.0.57
[root@Centos8 ~]#systemctl daemon-reload
[root@Centos8 ~]#systemctl restart docker
[root@Centos8 ~]#docker pull 10.0.0.47/example/alpine:v1.0
v1.0: Pulling from example/alpine
188c0c94c7c5: Pull complete
Digest: sha256:d7342993700f8cd7aba8496c2d0e57be0666e80b4c441925fc6f9361fa81d10e
Status: Downloaded newer image for 10.0.0.47/example/alpine:v1.0
10.0.0.47/example/alpine:v1.0
[root@Centos8 ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.47/example/alpine v1.0 d6e46aa2470d 4 weeks ago 5.57MB
自动打标签上传镜像脚本
[19:34:38 root@Ubuntu ~]#cat build.sh
#!/bin/bash
docker build -t $1 .
docker tag $1 10.0.0.47/example/$1
docker push 10.0.0.47/example/$1
9、实现 harbor 高可用
Harbor支持基于策略的Docker镜像复制功能,这类似于MysqL的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,已经有用很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制功能。
如果要将第一台主机的镜像复制到第二台,需要在第一台主机界面配置,将10.0.0.47仓库中的镜像拷贝到10.0.0.57仓库中。
在10.0.0.47主机操作
创建复制规则
规则保存成功,自动开始复制
实现双向复制需要在10.0.0.57主机也进行同样操作
#在10.0.0.57主机上传镜像测试双向复制
[20:57:12 root@Ubuntu ~]#docker tag 0d120b6ccaa8 10.0.0.57/example/centos:v1.0
[20:57:28 root@Ubuntu ~]#docker push 10.0.0.57/example/centos:v1.0
The push refers to repository [10.0.0.57/example/centos]
291f6e44771a: Pushed
v1.0: digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 size: 529
Harbor
Harbor
Harbor核心组件解释
Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
Registry:镜像仓库,负责存储镜像文件。
Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
Harbor简单部署
2019年8月搜索网上的方案,都是使用docker容器运行,使用docker-compose编排安装。
1.安装docker-compose
yum install python-pip;pip install docker-compose
2.下载Harbor离线包
https://github.com/vmware/har...
安装有两种方式,一种是off-line ,一种是on-line,即离线和在线安装,离线安装需要下载的安装包较大,在线安装下载的安装包很小。
3.解压,进入安装包
tar -xvf harbor-offline-installer-v1.7.4.tgz ; cd harbor
4.修改docker-compose.notary.yml和harbor.cfg文件
[root@node03 harbor]# vim docker-compose.yml
[root@node03 harbor]# vim harbor.cfg
Harbor仓库介绍与搭建过程
5.执行./prepare,更新一下配置文件
[root@node03 harbor]# ./prepare
6.执行./install.sh,开始安装并启动
[root@node03 harbor]# ./install.sh
7.在火狐浏览器中访问测试,此处的用户名默认为admin,密码在habor.cfg中,可以自己设置。
harbor高可用集群配置
https://www.cnblogs.com/breez...
关于Harbor 基础和harbor教程的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于120.部署harbor以及使用harbor、Centos7安装Docker镜像仓库Harbor1.5.3、harbor垃圾回收(物理删除)、Docker 之分布式仓库 Harbor及Harbor高可用性、Harbor等相关内容,可以在本站寻找。
本文标签: