Harbor服务
概述
-
最近创鑫公司又提出一个新需求,将项目全部打包成镜像部署私有仓局,经过几轮商讨,最终选择Docker Harbor
-
Docker Harbor 有可视化的web管理界面,可以方便管理Docker镜像,又提供了多个项目的镜像权限管理及控制功能
-
Harbor是VMware公司开源的企业级Docker registry项目
-
Harbor的优势
♦ 基于角色控制
♦ 基于镜像的复制策略
♦ 基于LDAP / AP
♦ 图像删除和垃圾收集
♦ 图形UI
♦ 审计
♦ RESTful API
注释: RESTful 是一种规范和标准 ,API 接口
操作环境
Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版 上。
服务端主机需要安装 Python、Docker 和 Docker Compose,像虚拟机中自带python的环境。
实验环境
准备俩台服务器,一台作为服务端主机,还有一台作为客户端,俩台主机必须要有docker的环境,其中服务端主机还需要docker compose
首先查看 Docker-Compose 版本判断安装是否成功
cp docker-compose /usr/local/bin/
docker-compose -v
1.下载 Harbor 安装程序
wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
2. 配置 Harbor 参数文件
vim /usr/local/harbor/harbor.cfg
hostname = 20.0.0.32 在第五行修改
hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN)
例如 20.0.0.32 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。
3. 启动 Harbor
sh /usr/local/harbor/install.sh
4. 查看 Harbor 启动镜像
//查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vmware/harbor-log v1.2.2 36ef78ae27df 2 years ago 200MB
vmware/harbor-jobservice v1.2.2 e2af366cba44 2 years ago 164MB
vmware/harbor-ui v1.2.2 39efb472c253 2 years ago 178MB
vmware/harbor-adminserver v1.2.2 c75963ec543f 2 years a
省略
。。。。。。。。
//查看容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aee770c69872 vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
74e21da53cdd vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" About a minute ago Up About a minute harbor-jobservice
0a37b29881e9 vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" About a minute ago Up About a minute
省略
。。。。。。
cd /usr/local/harbor/ 切到该目录下,因为之前解压就是解压到/usr/local 目录下
docker-compose ps 列出所有运行的容器
[root@node1 harbor]# ls
common docker-compose.notary.yml harbor.cfg LICENSE upgrade
docker-compose docker-compose.yml harbor.v1.2.2.tar.gz NOTICE
docker-compose.clair.yml harbor_1_1_0_template install.sh prepa
[root@node1 harbor]#docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/harbor_adminserver Up
harbor-db docker-entrypoint.sh mysqld Up 3306/tcp
harbor-jobservice /harbor/harbor_jobservice Up
harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp
harbor-ui /harbor/harbor_ui Up
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp,
0.0.0.0:4443->4443/t 0.0.0.0:80->80/tcp
registry /entrypoint.sh serve /etc/ ... Up 5000/tcp
如果一切都正常,应该可以打开浏览器访问 http://20.0.0.32 的管理页面,默认 的管理员用户名和密码是 admin/Harbor12345。
//添加项目并且填写项目名称
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,
Register 服务器在端口 80 上侦听。
登录
docker login -u admin -p Harbor12345 http://127.0.0.1
下载镜像进行测试
docker pull nginx
镜像打标签
[root@node1 harbor]# docker tag nginx:latest 127.0.0.1/myyang-kgc/nginx
注释:为什么指向的ip是127.0.0.1,因为Harbor登录默认https加密登录的,但是linux登录默认是http所以只能用测试ip127.0.0.1,127.0.0.1是系统默认的本地安全的地址,等你上传镜像到私库时,它会自动给你转化为主机ip,因为你在harbor.cfg中修改了本地的ip,系统会自动识别。(如果你需要使用本地主机的话,那么需要在/usr/var/systemd/system/docker.service 中添加不安全的注册的ip主机,表示不安全的主机也可以正常登录)
上传镜像到Harbor
[root@node1 harbor]# docker push 127.0.0.1/myyang-kgc/nginx
以上操作都是在 Harbor 服务器本地操作。如果其他客户端上传镜像到 Harbor,就会报
如下错误。因为其他客户端并没有下载harbor的私有仓库,所有它没有办法把地址指向服务器端的127.0.0.1
登录到客户端
[root@client ~]# docker login -u admin -p Harbor12345 http://20.0.0.32 发现始终无法登录(服务器端的ip)
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://20.0.0.32/: EOF
//解决:
[root@client ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 20.0.0.32 --containerd=/run/containerd/containerd.sock
[root@client ~]# systemctl daemon-reload 一定要先重启守护进程
[root@client ~]# systemctl restart docker 在重启docker
[root@client ~]# docker login -u admin -p Harbor12345 http://20.0.0.32 现在就可以成功登录上了
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
[root@client ~]# docker pull tomcat
[root@client ~]# docker images
[root@client ~]# docker tag tomcat 20.0.0.32/myproject-kgc/tomcat
[root@client ~]# docker push 20.0.0.32/myproject-kgc/tomcat
现在看到已经能上传成功了
然后批量删除镜像
docker ps -a | awk ‘{print “docker rm ”$1}’ | bash
[root@node2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
下载镜像文件
[root@node2 ~]# docker pull 20.0.0.32/myyang-kgc/tomcat
下载完成之后你在web界面刷新下会显示下载次数
创建一个其他用户
在客户端上操作
[root@node2 ~]# docker login -u lisi -p Harbor12345 http://20.0.0.32
为什么客户端指向的ip地址是服务端主机的地址。而不是之前服务端登录ip的地址127.0.0.1,那是因为服务器在harbor.cfg配置的文件中已经修改本地段的ip,服务器镜像上传成功后,会发现私有仓库默认的地址是服务器ip地址而不是本地测试地址,故客户端在登录时,要指向的ip是服务器ip而不是测试ip
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
移除 Harbor 服务容器同时保留镜像数据/数据库
- Harbor服务器上操作
docker-compose down -v
如需重新部署,需要移除 Harbor 服务容器全部数据(该命令慎用)
- 持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的
/var/log/Harbor/目录下。
rm -rf /data/database/
rm -rf /data/registry/