前言
按照本文安装首先需要准备好docker环境。如果没有参考:https://blog.csdn.net/qq_45827611/article/details/135926930?spm=1001.2014.3001.5502。
harbor私有镜像仓库,用于存储容器镜像,在项目自动化测试项目中,可以保存各个版本的自动化脚本镜像,结合Jenkins流水线项目可进行封装、推送、运行、销毁、删除、并在harbor中保留每次运行的脚本容器镜像。
harbor本身设计就是需要运行在docker中的,所以需要事先准备好docker环境。
docker compose 安装
由于harbor官方是通过docker-compose来快速安装的,因此需要在宿主机中安装docker-compose环境。
官方安装指导地址:https://docs.docker.com/compose/install/linux/
官方卸载指导地址:https://docs.docker.com/compose/install/uninstall/
手动部署
[root@panzer ~]# DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} # bash shell脚本语句,用于设置环境变量DOCKER_CONFIG的值
[root@panzer ~]# mkdir -p $DOCKER_CONFIG/cli-plugins #创建目录
[root@panzer ~]# curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose # 下载安装到 -o 位置,为活动用户安装。
这里装完是一个可执行的二进制文件。
[root@panzer ~]# chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose 赋予执行权限
[root@panzer ~]# chmod +x /usr/local/lib/docker/cli-plugins/docker-compose 为所有用户安装
[root@panzer cli-plugins]# docker-compose version 验证是否安装成功
该方法完全按照官方方法安装,没有出现问题,之前按照某些帖子的方法到这一步会出现找不到该命令的情况,一下是一些docker compose常用命令
docker-compose up //启动所有服务,默认读取名为docker-compose.yml文件
docker-compose up -d //在后台启动所有服务
docker-compose build //在运行项目前先构建项目所需镜像
docker-compose ps //列出本地docker-compose.yml文件里定义的正在运行的所有服务
docker-compose stop //停止所有服务,如果服务没有停止,可以使用docker-compose kill强制杀死服务
docker-compose start //开启所有服务
docker-compose rm //删除所有服务
docker compose down -v //停止并删除所有由 docker-compose up 启动的容器,-v:删除所有关联的卷。
docker compose up -d //这个命令将启动或重新启动所有由 docker-compose.yml 文件定义的服务。
//最后两条命令在修改完harbor.yml配置文件后用起来比较方便
部署harbor
最新下载地址:https://github.com/goharbor/harbor/releases/download/v2.9.2/harbor-offline-installer-v2.9.2.tgz
GitHub项目地址:https://github.com/goharbor/harbor/releases/tag
卸载
使用下面命令,首先docker compose安装成功。
[root@panzer local]# docker-compose down -v 停止harbor服务
[root@panzer local]# rm -rf /usr/local/harbor/ 删除整个目录
[root@panzer local]# docker stop $(sudo docker ps -aq --filter name=harbor) 停止所有harbor容器
[root@panzer local]# docker rm $(sudo docker ps -aq --filter name=harbor) 移除所有harbor容器
[root@panzer local]# docker rmi $(sudo docker images --filter=reference='goharbor/*' -q) 删除本地所有harbor镜像
下载安装
准备数据挂载目录,根据自己习惯创建。
[root@panzer home]# mkdir harbor_data
[root@panzer home]# chmod 777 harbor_data
下载
首先确保Linux上有wget工具,没有就yum一个,yum没有就apt-get一个。
[root@panzer app]# wget https://github.com/goharbor/harbor/releases/download/v2.9.2/harbor-offline-installer-v2.9.2.tgz 当前工作目录在/app下,所以是下载到/app目录下的
安装
[root@panzer app]# tar xf harbor-offline-installer-v2.4.3.tgz -C /usr/local/ 解压到/usr/local/下
[root@panzer app]# cd /usr/local/harbor/ 切换到harbor目录
进入/usr/local/harbor/目录下
[root@panzer harbor]# cp harbor.yml.tmpl harbor.yml 拷贝一份文件模版
[root@panzer harbor]# vim harbor.yml 编辑模板
这里没有修改端口无法docker login的看后面。
添加数据存储位置
[root@panzer harbor]# ./prepare 更新harbor.yml后运行改文件,相当于使文件生效
[root@panzer harbor]# ./install.sh 安装启动harbor
启动有6个步骤,我的这个服务器最后报1514端口无法通信。
问题1:1514端口解决方案
[root@panzer harbor]# vim /etc/rsyslog.conf
操作将列两行代码注释取消掉,注意port值是否为1514,如果不是,就改为1514。各个服务器情况可能不一样,可根据报错的具体端口来修改。
[root@panzer harbor]# systemctl restart rsyslog.service 重启服务
[root@panzer harbor]# docker compose up -d 启动所有的harbor相关容器
[root@panzer harbor]# docker ps |grep harbor检查容器内的服务是否启动了
有些版本启动的是10个,目前2.9版本启动的为9个,正常使用,到这里harbor就算安装完成,并且可以通过web页面访问服务
harbor.yml文件修改生效问题
进入harbor安装目录,编辑harbor.yml文件后执行:
[root@panzer harbor]# ./prepare 更新配置
[root@panzer harbor]# docker compose down -v 关掉所有容器 与harbor相关的
[root@panzer harbor]# docker compose up -d 启动所有容器
web访问
登录账号密码在harbor安装目录下的harbor.yml文件中查看 harbor_admin_password: Harbor12345
docker镜像推送
使用harbor的注意事项:
- 在客户端上传镜像时一定要记得执行docker login进行用户认证,否则无法直接push
- 在客户端使用的时候如果不是用的https则必须要在客户端的/etc/docker/daemon.json配置文件中配置insecure-registries参数
- 数据存放路径应在配置文件中配置到一个容量比较充足的共享存储中
- Harbor是使用docker-compose命令来管理的,如果需要停止Harbor也应用docker-compose stop来停止,其他参数请–help
配置客户端访问harbor
这里的客户端,可以是同一台服务器上的docker,也可以是不同服务器上的docker。
如果/etc/docker目录下有daemon.json文件,直接添加insecure-registries参数,该参数是让客户端支持 http通信,https需要证书,这里没有安排证书:
{
"insecure-registries":["harbor主机IP:对应端口"],
"registry-mirrors": ["https://441nlr92.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
#表示我们内网访问harbor的时候走的是http,这是一个json文件注意json的格式
}
如果没有daemon.json文件,可以执行下面的代码:
[root@panzer docker]# cat > /etc/docker/daemon.json <<EOF
> {
> "insecure-registries":["harbor_host_ip:port"]
> }
> EOF
[root@panzer docker]# systemctl daemon-reload && systemctl restart docker 重新加载配置文件并重启
docker 登录harbor
[root@panzer harbor]# docker login -u admin -p Harbor12345 harbor_host_ip:port
正常情况到这一步就可以登录成功,后续可以将本地镜像推送到私有仓库了,但是我这里就出现了401鉴权失败的问题,如下图:
问题就出在默认的80端口上,不知道是不是有冲突,所以需要将/etc/docker/daemon.json,/usr/local/harbor/harbor.yml这两个文件中的默认的http:80端口更改掉,根据自己情况修改,并放通防火墙,修改完成后我的就成功了。
本地镜像打包
# 功能:将本地镜像打包为harbor私有仓库IP和端口号以及项目名为前缀的镜像名称
# 语法:docker tag [images] ip:port/项目名称/[镜像名称]:[镜像版本号]
[root@panzer harbor]# docker tag b90e2ddd15fc harbor_host_ip:port/test-origin/jenkins_python_allure:2.0
上传镜像
# 功能:将本地镜像上传的harbor私有仓库
# 语法:docker push ip:port/项目名称/[镜像名称]:[镜像版本号]
[root@panzer harbor]# docker push harbor_host_ip:port/test-origin/jenkins_python_allure:2.0
web也查看镜像
登录web系统后,项目——点击某个项目名称,选择“镜像仓库”选项卡,即可看到当前项目下的镜像列表。
下载镜像
# 功能:从harbor私有仓库拉取镜像到本地
# 语法:docker pull ip:port/项目名称/[镜像名称]:[镜像版本号]
# 项目名称,镜像名称,镜像版本,可在web端项目内查看
[root@panzer home]# docker pull harbor_host_ip:port/test-origin/jenkins_python_allure:2.0