写点什么

开源一夏 |【云原生】DevOps(五):集成 Harbor

作者:是Dream呀
  • 2022 年 8 月 02 日
  • 本文字数:1842 字

    阅读完需:约 6 分钟


@TOC


前言: 📢📢📢当下云原生火爆全网,云原生充分利用了云计算弹性、敏捷、资源池和服务化特性,改变云端应用的设计、开发、部署和运行模式,为我们大大提供了便利,本篇文章将带大家走进云原生的世界,揭开它的神秘面纱。💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺

一、Harbor 介绍

前面在部署项目时,我们主要采用 Jenkins 推送 jar 包到指定服务器,再通过脚本命令让目标服务器对当前 jar 进行部署,这种方式在项目较多时,每个目标服务器都需要将 jar 包制作成自定义镜像再通过 docker 进行启动,重复操作比较多,会降低项目部署时间。


我们可以通过 Harbor 作为私有的 Docker 镜像仓库。让 Jenkins 统一将项目打包并制作成 Docker 镜像发布到 Harbor 仓库中,只需要通知目标服务,让目标服务统一去 Harbor 仓库上拉取镜像并在本地部署即可。


Docker 官方提供了 Registry 镜像仓库,但是 Registry 的功能相对简陋。Harbor 是 VMware 公司提供的一款镜像仓库,提供了权限控制、分布式发布、强大的安全扫描与审查机制等功能

二、 Harbor 安装

这里采用原生的方式安装 Harbor。


  • 下载 Harbor 安装包:https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz

  • 拖拽到 Linux 并解压:


  tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/
复制代码


  • 修改 Harbor 配置文件:

  • 首先复制一份 harbor.yml 配置


    cp harbor.yml.tmpl harbor.yml
复制代码


  • 编辑 harbor.yml 配置文件


  • 启动 Harbor


  ./install.sh
复制代码



  • 登录 Harbor


  • 首页信息


三、 Harbor 使用方式

Harbor 作为镜像仓库,主要的交互方式就是将镜像上传到 Harbor 上,以及从 Harbor 上下载指定镜像


在传输镜像前,可以先使用 Harbor 提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。

1. 添加用户构建项目

  • 创建用户


  • 构建项目(设置为私有)


  • 给项目追加用户


  • 切换测试用户


2. 发布镜像到 Harbor


  docker login -u 用户名 -p 密码 Harbor地址
复制代码


  • 推送镜像到 Harbor


  • |


3. 从 Harbor 拉取镜像 ls

跟传统方式一样,不过需要先配置/etc/docker/daemon.json文件


{        "registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"],        "insecure-registries": ["192.168.11.11:80"]}
复制代码



4. Jenkins 容器使用宿主机 Docker

构建镜像和发布镜像到 harbor 都需要使用到 docker 命令。而在 Jenkins 容器内部安装 Docker 官方推荐直接采用宿主机带的 Docker 即可。


设置 Jenkins 容器使用宿主机 Docker


  • 设置宿主机 docker.sock 权限:


  sudo chown root:root /var/run/docker.sock  sudo chmod o+rw /var/run/docker.sock
复制代码


  • 添加数据卷


  version: "3.1"  services:    jenkins:      image: jenkins/jenkins      container_name: jenkins      ports:        - 8080:8080        - 50000:50000      volumes:        - ./data/:/var/jenkins_home/        - /usr/bin/docker:/usr/bin/docker        - /var/run/docker.sock:/var/run/docker.sock        - /etc/docker/daemon.json:/etc/docker/daemon.json
复制代码

5. 添加构建操作

6. 编写部署脚本

部署项目需要通过 Publish Over SSH 插件,让目标服务器执行命令。为了方便一次性实现拉取镜像和启动的命令,推荐采用脚本文件的方式。


添加脚本文件到目标服务器,再通过 Publish Over SSH 插件让目标服务器执行脚本即可。


  • 编写脚本文件,添加到目标服务器


  harbor_url=$1  harbor_project_name=$2  project_name=$3  tag=$4  port=$5
imageName=$harbor_url/$harbor_project_name/$project_name:$tag
containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'` if [ "$containerId" != "" ] ; then docker stop $containerId docker rm $containerId echo "Delete Container Success" fi
imageId=`docker images | grep ${project_name} | awk '{print $3}'`
if [ "$imageId" != "" ] ; then docker rmi -f $imageId echo "Delete Image Success" fi
docker login -u DevOps -p P@ssw0rd $harbor_url
docker pull $imageName
docker run -d -p $port:$port --name $project_name $imageName
echo "Start Container Success" echo $project_name
复制代码


并设置权限为可执行


  chmod a+x deploy.sh
复制代码


7. 配置构建后操作


用户头像

是Dream呀

关注

Python领域优质创作者 2021.03.30 加入

2021年度博客之星TOP100,2021年度领域TOP5 Python领域优质创作者,交流、合作、学习,欢迎私信我VX+++ 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!

评论

发布
暂无评论
开源一夏 |【云原生】DevOps(五):集成Harbor_是Dream呀_InfoQ写作社区