linux搭建harbor私服

云中志

共 4678字,需浏览 10分钟

 · 2021-12-31

前言

前几天我们分享了manjaro环境下构建k8s集群的过程,其中我提到我顺手搭建了harbor环境,所以今天我想抽点时间来简单分享下如何在linux环境下搭建harbor平台。

Harbor

我们先来看下harbor是什么?

harbor是一个容器镜像仓库的开源项目,它主要为我们提供了一套镜像存储管理的解决方案,我们简单将它理解为镜像仓库即可。它中文的意思是港口,也就是存放镜像的仓库,而docker是码头工人的意思,也就是镜像的搬运工,突然想起了某泉的广告词,对docker来说,也同样适用:我不生产镜像,我只是镜像的搬运工。

Harbor是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。

准备工作

因为我们的harbor环境是基于docker-compose构建的,所以我们先要安装docker-compose,这里以manjaro为例,其他环境类似:

sudo pacman -S docker-compose
# ubuntu环境可有通过如下命令
sudo apt install sudo docker-compose

版本没有要求,我目前安装的是2.2.2:

安装完成后可以通过下面的命令测试下:

docker-compose -v

执行结果类似上图,则表明安装成功。

下载安装

下载脚本

harbor本身是开源项目,可以直接访问项目github仓库进行下载,项目地址如下:

https://github.com/goharbor/harbor

不喜欢自己动手的小伙伴可以直接通过如下命令下载:

wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz

下载完成后直接解压即可,命令如下:

tar -zxvf harbor-offline-installer-v2.4.1.tgz

解压之后文件目录如下:

下面我们只需要修改配置文件即可。

配置

解压之后的harbor目录下有一个名为harbor.yml.tmpl的配置文件模板,我们需要基于这个文件构建我们的配置文件(配置模板),这里直接复制即可,复制之后的目标文件名为harbor.yml(强制,如果要用其他名称,就需要修改intall.sh脚本)。

下面我们看下如何配置,这里我直接放上我的配置和各个配置的作用:

# Configuration file of Harbor

# 这里配置的是我们harbor服务的访问ip,管理端也是通过这个地址访问的,不要使用localhost 或者 127.0.0.1,因为Harbor是需要外部客户端访问的
hostname: 192.168.0.102

# http的访问配置
http:
  # http访问端口, 默认80. 如果启用了https协议, 则会通过这个端口重定向到https端口
  port: 88

# harbor管理端的登录密码,默认账户是admin
harbor_admin_password: Harbor12345

# Harbor DB设置
database:
  # 数据库
  password: root123
  # idle最大连接数
  max_idle_conns: 50
  # 数据库最大连接数,默认1024(postgres)
  max_open_conns: 100

# 默认数据卷()
data_volume: /data
# 以下数据我没有改动
trivy:
  ignore_unfixed: false

  skip_update: false
  #
  # insecure The flag to skip verifying registry certificate
  insecure: false

jobservice:
  # Maximum number of job workers in job service
  max_job_workers: 10

notification:
  # Maximum retry count for webhook job
  webhook_job_max_retry: 10

chart:
  # Change the value of absolute_url to enabled can enable absolute url in chart
  absolute_url: disabled

# Log configurations
log:
  # options are debug, info, warning, error, fatal
  level: info
  # configs for logs in local storage
  local:
    rotate_count: 50
    rotate_size: 200M
    # The directory on your host that store log
    location: /var/log/harbor

_version: 2.4.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy

除了上面的ip、端口以及连接数,其他的配置我都用的是默认配置,修改完成之后,我们就可以安装了。

安装

安装也很简单,我们直接执行install.sh脚本即可,为了保险起见,推荐使用sudo操作:

sudo ./install.sh

然后静静等待安装完成即可:

看到started successfully,就说明harbor已经安装完成了,我们可以通过浏览器访问下。

测试

用浏览器打开我们刚才配置的地址和端口,可以看到如下页面:

至此,我们的harbor就安装完成了,是不是很简单呢?

使用

下面我们再来看下具体如何使用harbor

通过我们前面配置的密码和用户名(默认admin),登录之后我们会看到如下页面:

正常情况下,你应该只能看到library这个项目,你可以在这里创建自己的项目,然后后面我们可以通过dockerharbor的项目中推送镜像。

镜像操作

在通过dockerharbor推送镜像之前,我们先要在docker中配置本地仓库,首先我们要打开docker的配置文件:

sudo vim /etc/docker/daemon.json

向其中增加insecure-registries的配置信息:

 "insecure-registries":["http://192.168.0.102:88"]

最终配置完的效果如下:

这里的http://192.168.0.102:88就是我前面配置的harbor的地址和端口,配置完成后我们才能通过docker正常登录,否则会报错。

登录

登录命令如下:

sudo docker login -u admin -p Harbor12345 192.168.0.102:88

这里简单解释下,-u后面是登录用户名,-p是登录密码,再后面是地址和端口

正常情况下,最后会提示Login Succeeded,表明配置都是ok的,这时候我们就可以通过dokcer命令向harbor中推送镜像了。

推送镜像

关于spring boot项目构建docker镜像的相关内容可以参考之前我们分享的内容:

https://mp.weixin.qq.com/s?__biz=MjM5NDMwNzA0NQ==&mid=2648419079&idx=1&sn=077f24cdd1308041e238ffa4705b5bb1&chksm=bea6c58d89d14c9b4cb4a1eea431c81af338c534dcaf01a827b7511815f8a7f5e69f20e91a35&token=1495367877&lang=zh_CN#rd

首先我们通过docker build构建镜像:

然后通过tag命令创建标签,再通过push命令将镜像推送到harbor仓库中,这里以我刚创建的syske项目为例。其实,harbor的项目下面是有镜像推送命令的,我们只需要复制出来替换其中的REPOSITORYTAG即可:

tag命令

复制出来的tag命令如下:

docker tag SOURCE_IMAGE[:TAG] 192.168.0.102:88/syske/REPOSITORY[:TAG]

替换之后如下:

docker tag springboot-learning:v1 192.168.0.102:88/syske/springboot-learning:v1

如果在执行tag命令过程中提示权限不足,可以通过sudo操作:

操作不报错,则表明操作成功。

push命令

复制出来的push命令如下:

docker push 192.168.0.102:88/syske/REPOSITORY[:TAG]

替换之后如下:

docker push 192.168.0.102:88/syske/springboot-learning:v1

tag命令类似,这个命令也是有权限要求的:

然后换成sudo重新操作即可:

推送成功后,我们可以登录harbor看下:

可以看到harbor中已经有了我们刚刚推送的镜像,这样我们就可以在k8sdocker等环境使用我们的镜像了

拉取镜像

拉取镜像的命令,我们同样也可以在harbor页面复制:

然后我们就可以通过复制到的命令拉取我们的镜像

docker pull 192.168.0.102:88/syske/springboot-learning:v1

或者在k8s直接使用:

结语

好了,今天的内容就到这里吧,下面我们做一个简单的总结。

今天我们主要分享了harbor私服的搭建过程,其中包括harbor的基本配置和简单使用,当然从内容上来讲,这些都属于比较基础的操作,但是经过这样的流程探索和实践,我相信你也一定对后端开发部署的流程有了更全面的认知和了解,有了这些认知,你未来就算使用其他的开发管理工具,你也会清楚地知道每一个组件的用途,帮助你更好地使用这些工具。另外,就算未来让你抛开这些工具自己动手去操作,你也不至于手足无措,因为你掌握了这些组件最基本的内部工作原理。

当然,harbor也只能算企业应用开发部署中的一个小组件,毕竟目前很多公司已经上了集成开发环境,也就是我们经常听到的CI/CD(持续集成/持续交付),这里我放上一张我们公司目前CI/CD的大致流程图(docker环境目前已经弃用了),目前很多公司可能都是这样的开发部署流程,只是工具上会有一些小差异:

当然,有些公司可能是通过jenkins手动打包(包括生成镜像并推送到私服),然后通过手动重启容器,这一套手动操作和上面的自动化操作都没有本质上区别,只是效率更高,流程更规范而已。

- END -


浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报