harbor私有镜像仓库,搭建及管理
私有镜像仓库
docker-distribution docker的镜像仓库,默认端口号5000
做个仓库,把镜像放里头,用什么服务,起什么容器
vmware公司在docker私有仓库的基础上做了一个web页面,是harbor
docker可以把仓库的镜像下载到本地,也可以直接用私有仓库的镜像启动容器
云服务商的镜像加速器,就是云服务商做的私有镜像仓库,供云服务商的用户使用
registry镜像仓库tag格式:
registry:5000/img/img:tag
仓库地址 路径 镜像名称和标签
路径不需要提前创建
~]# docker tag nginx:latest registry:5000/img/myimg:nginx
# 上传镜像之前,先要给镜像改名字,才能识别把镜像放在什么仓库的什么路径下
~]# docker push registry:5000/img/myimg:nginx
镜像仓库的library路径比较特别,是默认路径
创建容器时,不写路径,默认就是library
容器可以映射宿主机的目录
部署harbor镜像仓库
官方把harbor做成了compose项目,
部署harbor服务器:
1. 给harbor主机安装docker环境,因为harbor是以docker-compose的方式部署的
]# dnf -y install docker-ce
]# systemctl enable docker --now
2. harbor仓库没有域名,只能使用主机名。所以要在harbor主机的/etc/hosts做好映射
]# tail -1 /etc/hosts
192.168.1.30 harbor
3. 用跳板机把harbor软件包传给harbor主机,harbor是一个绿色软件,不用安装,解压就可以用,比如解压到/usr/local/目录下
# proxy主机操作]# rsync -av harbor-v2.9.2.tgz 192.168.1.30:/root/
# harbor主机操作
]# tar -zxf harbor-v2.9.2.tgz -C /usr/local/
]# cd /usr/local/harbor/
]# tree
.
├── common.sh
├── harbor.v2.9.2.tar.gz # 镜像
├── harbor.yml.tmpl
├── install.sh
├── LICENSE
└── prepare
]# docker load -i harbor.v2.9.2.tar.gz # 导入镜像到本地
]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/harbor-exporter v2.9.2 xxx x months ago xxMB
goharbor/redis-photon v2.9.2 xxx x months ago xxMB
goharbor/trivy-adapter-photon v2.9.2 xxx x months ago xxMB
goharbor/harbor-registryctl v2.9.2 xxx x months ago xxMB
goharbor/registry-photon v2.9.2 xxx x months ago xxMB
goharbor/nginx-photon v2.9.2 xxx x months ago xxMB
goharbor/harbor-log v2.9.2 xxx x months ago xxMB
goharbor/harbor-jobservice v2.9.2 xxx x months ago xxMB
goharbor/harbor-core v2.9.2 xxx x months ago xxMB
goharbor/harbor-portal v2.9.2 xxx x months ago xxMB
goharbor/harbor-db v2.9.2 xxx x months ago xxMB
goharbor/prepare v2.9.2 xxx x months ago xxMB
4. harbor用https协议,https需要一个证书,
]# mkdir tls
]# openssl genrsa -out tls/cert.key 2048 # 创建私钥
]# openssl req -new -x509 -days 3650 -key tls/cert.key -out tls/cert.crt -subj "/C=CN/ST=SZ/L=SZ/O=HI/OU=HI/CN=harbor" #生成证书
]# tree tls/
tls/
├── cert.crt
└── cert.key
5. 启动harbor项目
]# mv harbor.yml.tmpl harbor.yml
]# vim harbor.yml
05: hostname: harbor
08: # http: # 注释掉http,用https
10: # port: 80
17: certificate: /usr/local/harbor/tls/cert.crt # 证书
18: private_key: /usr/local/harbor/tls/cert.key # 密钥
36: harbor_admin_password: <登录密码> # 自己设置登录密码
]# ./prepare #检测项目环境,如果OK,就会生成docker-compose.yml项目文件
]# ls
common docker-compose.yml harbor.yml LICENSE privkey.pem
common.sh harbor.v2.9.2.tar.gz install.sh prepare tls
]# docker compose -f docker-compose.yml up -d # 启动docker项目
# 让harbor这个docker compose项目,开机自启动
]# chmod 0755 /etc/rc.d/rc.local
]# echo "/usr/bin/docker compose -p harbor start" >> /etc/rc.d/rc.local
6. 通过ELB负载均衡443端口发布harbor,通过https://elb_ipaddress访问harbor仓库
7. 管理员admin,通过菜单栏:系统管理-->用户管理,创建普通用户。
8. 在docker1主机,进行本机域名解析
~]# tail -1 /etc/hosts
192.168.1.30 harbor
9. 把harbor仓库信息,添加至docker主机,让docker知道有这么个仓库,
并添加信任主机(证书,自己做的需要,授权机构认证的不需要)
]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://harbor:443", "https://words.mirror.swr.examplecloud.com"],
"insecure-registries": ["harbor:443"]
]# systemctl restart docker
]# docker info |grep -A2 harbor
harbor:443 # docker已识别harbor仓库
127.0.0.0/8
Registry Mirrors:
https://harbor:443/ # docker已识别harbor仓库
https://words.mirror.swr.examplecloud.com/
Live Restore Enabled: false
10. 在命令行,用刚创建的普通用户,测试登录与登出
]# docker login harbor:443
Username: example_name # 输入用户名
Password: # 输入密码
... Your password will be stored in /root/.docker/config.json
... # 记录登录信息了,等于开机自动登录,不用再手动登录
...
Login Succeeded # 登录成功
]# docker logout harbor:443
Removing login credentials for harbor:443
~]# cat /root/.docker/config.json
{
"auths": {} # 登出后,登录信息会删除
}
11. harbor与registry的区别 registry可以无视路径上传镜像
12. harbor仓库的管理
harbor:443/myimg/img:tag
harbor里面有个概念,是项目,在web页面左侧菜单栏,第一个字段
harbor的项目就是harbor的路径,项目需要提前创建出来,如果不
提前创建出来,这个项目就是无法使用的,
谁创建的这个项目,项目的路径就由谁管理,其他人就使用其他名称其他路径
所以,想上传镜像,就需要先创建项目
创建项目是基于web的,通过web页面创建项目
登录仓库用的是自定义用户,就需要用这个用户创建项目
项目分为两种:
一种是公共仓库,任何人可以访问和下载镜像
一种是私有仓库,只有认证的用户才可以访问和下载
harbor是容器集群的核心仓库服务
13. 创建三个harbor项目
公共项目k8s、plugins
私有项目private
14. 上传镜像至harbor项目
harbor仓库不管是公共的还是私有的,想上传镜像,都需要提供用户名密码
如何提供?用docker login
# docker主机操作
]# docker login harbor:443 # 登录harbor仓库
Username: example_name # 普通用户用户名
Password: # 此用户密码
]# docker images # 查看docker主机本地镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
myos php-fpm example xx months ago x75MB
myos nginx example xx months ago x74MB
myos latest example xx months ago x.67MB
myos httpd example xx months ago x99MB
myos 8.5 example xx months ago x49MB
rockylinux 8.5 example x years ago x05MB
]# docker tag myos:httpd harbor:443/private/httpd:latest
#tag,给本地镜像打标签
]# docker push harbor:443/private/httpd:latest
#push,上传tag好的镜像到harbor仓库
The push refers to repository [harbor:443/private/httpd]
xxx: Pushed
xxx: Pushed
xxx: Pushed
latest: digest: sha256:xxx size: xxx
上传成功,可在harbor的web页面看到上传的镜像httpd
其标签可在点击private/httpd后看到
15. library项目的所有者是harbor服务器的管理员用户
所以普通用户没有权限访问这个项目
如果要访问,需要管理员用户给予权限
授权方法:
管理员用户admin在web界面登录harbor仓库,
点击library项目
点击菜单栏关键字"成员"
添加用户,角色选择
授权后,普通用户可以向harbor仓库的library项目上传镜像
]# docker push harbor:443/library/myos:latest
The push refers to repository [harbor:443/library/myos]
xxx: Pushed
latest: digest: sha256:xxx size: x
docker的优秀点有很多,但当项目对容器需求量很大时,docker似乎比较局限于一台机器上运行。大规模的集群应用,似乎有一定限制。
大规模的容器集群编排管理并不容易,为了解决这个问题,各个厂商推出了第二个容器管理解决方案。就是管理容器集群的。
在docker swarm 、 apache mesos和kubernetes中
kubernetes更符合市场的需求
所以现在主流的容器集群编排管理工具,就主要是kubernetes,也就是k8s
以k8s为首的时代,被称为云原生
应该可以这么理解,
docker是管理容器、镜像以及镜像仓库的工具
k8s是管理容器集群的工具
harbor是提供镜像仓库的工具