🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor上,以及从Harbor上下载指定镜像 在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。 ### harbor添加用户 * 创建用户 | 创建用户 | | --- | | ![](https://img.kancloud.cn/fd/89/fd8974b769affd8ccbbc4e9c54032cbb_1920x747.png)| * 构建项目(设置为私有) | 构建项目 | | --- | | ![](https://img.kancloud.cn/64/c0/64c078586785267355e81510c66b733f_1920x710.png)| * 给项目追加用户 | 追加用户管理 | | --- | | ![](https://img.kancloud.cn/f6/d6/f6d6cd762ab145720f3a8460a3f3ad0f_1920x683.png) | * 切换测试用户 | 切换测试用户 | | --- | | ![](https://img.kancloud.cn/ec/da/ecda664434f2da6f6149f54598759ef0_1920x725.png) | ### 发布镜像到Harbor * 修改镜像名称 名称要求:harbor地址/项目名/镜像名:版本 | 修改镜像名称 | | --- | | ![](https://img.kancloud.cn/e1/59/e159763f8300698e4cfc935f2517a841_1654x414.png) | * 修改daemon.json,支持Docker仓库,并重启Docker | 修改daemon.json,支持Docker仓库 | | --- | | ![](https://img.kancloud.cn/d8/e8/d8e8ae4f8514d02a045763476078cc08_1656x136.png) | * 设置登录仓库信息 ~~~ docker login -u 用户名 -p 密码 Harbor地址 ~~~ * 推送镜像到Harbor | 推送镜像到Harbor | | --- | | ![](https://img.kancloud.cn/e6/ff/e6ff4c111e21d9e6a2dea684e8b3b855_1658x372.png) | | ![](https://img.kancloud.cn/58/4a/584ac266564f0360295e80eb5828f8a8_1920x495.png) | ### 从Harbor拉取镜像ls 跟传统方式一样,不过需要先配置/etc/docker/daemon.json文件 ~~~ {        "registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"],        "insecure-registries": ["192.168.11.11:80"] } ~~~ | 拉取镜像 | | --- | | ![](https://img.kancloud.cn/bf/e9/bfe9c7cb02d4efcbdec78cd790215cb9_1658x121.png)| ### 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 ~~~ ### 添加构建操作 | 制作自定义镜像 | | --- | | ![](https://img.kancloud.cn/8f/67/8f67db03c2e867304aeb9cdefc52425f_1903x403.png)| ### 编写部署脚本 部署项目需要通过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 ~~~ | 如图 | | --- | | ![](https://img.kancloud.cn/56/13/5613afaefcb911ce337e30451ee7f377_455x98.png) | ### 配置构建后操作 | 执行脚本文件 | | --- | | ![](https://img.kancloud.cn/5e/7e/5e7ec1952eca8aca97d303e3636e90de_1917x972.png) |