linux搭建harbor私服
共 4678字,需浏览 10分钟
·
2021-12-31 21:37
前言
前几天我们分享了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
这个项目,你可以在这里创建自己的项目,然后后面我们可以通过docker
往harbor
的项目中推送镜像。
镜像操作
在通过docker
向harbor
推送镜像之前,我们先要在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
的项目下面是有镜像推送命令的,我们只需要复制出来替换其中的REPOSITORY
和TAG
即可:
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
中已经有了我们刚刚推送的镜像,这样我们就可以在k8s
、docker
等环境使用我们的镜像了
拉取镜像
拉取镜像的命令,我们同样也可以在harbor
页面复制:
然后我们就可以通过复制到的命令拉取我们的镜像
docker pull 192.168.0.102:88/syske/springboot-learning:v1
或者在k8s
直接使用:
结语
好了,今天的内容就到这里吧,下面我们做一个简单的总结。
今天我们主要分享了harbor
私服的搭建过程,其中包括harbor
的基本配置和简单使用,当然从内容上来讲,这些都属于比较基础的操作,但是经过这样的流程探索和实践,我相信你也一定对后端开发部署的流程有了更全面的认知和了解,有了这些认知,你未来就算使用其他的开发管理工具,你也会清楚地知道每一个组件的用途,帮助你更好地使用这些工具。另外,就算未来让你抛开这些工具自己动手去操作,你也不至于手足无措,因为你掌握了这些组件最基本的内部工作原理。
当然,harbor
也只能算企业应用开发部署中的一个小组件,毕竟目前很多公司已经上了集成开发环境,也就是我们经常听到的CI/CD
(持续集成/持续交付),这里我放上一张我们公司目前CI/CD
的大致流程图(docker
环境目前已经弃用了),目前很多公司可能都是这样的开发部署流程,只是工具上会有一些小差异:
当然,有些公司可能是通过jenkins
手动打包(包括生成镜像并推送到私服),然后通过手动重启容器,这一套手动操作和上面的自动化操作都没有本质上区别,只是效率更高,流程更规范而已。