使用centos7部署Harbor私有仓库

安装过程

首先,我当你在centos7上已经装好了docker,如图:
抱光妹

harbor官方更推荐使用docker-compose(1.18.0+)来配合安装,于是乎我们要安装一下docker-compose,如下:

1
2
3
4
5
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#这一步国内的服务器可能会比较费时间
chmod +x /usr/local/bin/docker-compose
[root@func-lcshop-Harbor ~]# docker-compose -v
docker-compose version 1.24.1, build 4667896b

然后下载离线的harbor1.8安装包:

1
2
wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.2-rc1.tgz
tar -zxvf harbor-offline-installer-v1.8.2-rc1.tgz

进入harbor的文件夹去修改一下harbor.yml,将hostname改成服务器的外网地址,不过不想要默认的80端口,同时可以加上端口号,如下:
抱光妹

文件下面还有一个harbor_admin_password,这个是登录页面的初始密码。注意!密码不可以有!和@,不然命令行会报错!而且这个密码只能是第一次登陆可用,如果要改然后执行./install.sh,如下:
抱光妹

安装完毕了之后,看一下机器里生成了很多docker容器:
抱光妹

再去浏览器打开ip:端口就能看到harbor的页面,是不是超简单?
抱光妹

如果想要更换端口,在修改完harbor.yml之后,执行如下才会生效:

1
2
3
docker-compose down -v
./prepare
docker-compose up -d

修改密码?

假设我们已经修改了密码,并且重启了docker-compose,此时用命令行的方式访问harbor镜像库(推荐使用--password-stdin方法而不是在命令行里直接输入密码,先创建一个/root/.harborpwd文件,里面写入harbor.ymlharbor_admin_password),使用docker login -u admin --password-stdin harbor外网IP < /root/.harborpwd试试,竟然返回unauthorized: authentication required这个错误!为什么呢?因为上面说了harbor_admin_password里的密码只能第一次使用,之后改密码了是不能通过harbor.yml修改的。

那么应该如何修改密码?需要进到harbor的数据库里。现在新的harbor数据库默认是postgresql,所以那些重置mysql密码的文章可以直接略过了。

具体修改的方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@func-lcshop-Harbor ~]# docker exec -it harbor-db /bin/bash	#先登录到db容器里
root [ / ]# psql -h postgresql -d postgres -U postgres #这里需要输入配置文件里db密码,默认的是root123
Password for user postgres:
psql (9.6.10)
Type "help" for help.

postgres=# \c registry
You are now connected to database "registry" as user "postgres".
registry=# select * from harbor_user;
user_id | username | email | password | realname | comment | deleted | reset_uuid | salt | sysadmin_flag | creation_time | update_time
---------+------------+-------------------------+----------------------------------+----------------+----------------+---------+------------+----------------------------------+---------------+----------------------------+----------------------------
2 | anonymous | anonymous@example.com | | anonymous user | anonymous user | t | | | f | 2019-07-23 14:17:32.288001 | 2019-07-23 14:17:32.288001
1 | admin | admin@example.com | a71a7d0df981a61cbb53a97ed8d78f3e | system admin | admin user | f | | ah3fdh5b7yxepalg9z45bu8zb36sszmr | t | 2019-07-23 14:17:32.288001 | 2019-07-24 04:05:31.260468
(3 rows)

harbor采用的加密方式叫PBKDF2,在国外挺流行的,在国内用的人还不多。如果对这个比较感兴趣的可以去看 http://phantom0301.cc/2017/02/08/harborpass/ 这个文章,里面还有一个python2的脚本来帮助生成密码。

如果想改回默认的harbor12345,就在postgresql里执行update harbor_user set password='a71a7d0df981a61cbb53a97ed8d78f3e', salt='ah3fdh5b7yxepalg9z45bu8zb36sszmr' where username='admin';即可,不过我更推荐换一个新的密码,同时 update harbor_user set username='其他用户名' where user_id=1;,这样把admin也给改掉。

退出harbor-db容器,再新建/etc/docker/daemon.json,里面内容如下:

1
2
3
{
"insecure-registries" : ["Harbor外网IP地址"]
}

保存退出并且重启docker之后,此时就可以在命令行尝试登陆harbor了,如图:
抱光妹

图中的WARNING意思是密码会以一个比较简单的加密方式保存在/root/.docker/config.json里,如果你有好的习惯,每次都会logout的话,那么这个文件还是会自动删除掉这个密码的。

如果想要给harbor开启ldap,请看https://github.com/goharbor/harbor/blob/master/docs/configure_user_settings.md

上传镜像

整个镜像上传的过程如下:

1
2
3
4
docker login -u admin --password-stdin harbor外网IP < /root/.harborpwd			#登录
docker tag [ImageId] harbor外网IP/repository名/具体镜像名:版本号 #打一个tag
docker pull harbor外网IP/repository名/具体镜像名:版本 #推送
docker rmi harbor外网IP/repository名/具体镜像名:版本 #这一步是删除tag

repository名这个要在harbor上事前生成,不然无法push,会报错:denied: requested access to the resource is denied。上传上去的镜像会保存在/data/registry/docker/registry/v2/repositories/这个路径下,所以如果是有很多个镜像,建议/data盘买大一点。

注意!如果出现了网页可以登录但是docker login无法登录的情况,请去检查harbor.yml里的hostname与实际docker login的域名是否保持一致,https访问是否也一致。
抱光妹

配置https和高可用方案

其实在harbor.yml下面就已经有配置https的地方,但是官方的建议是不要在Harbor上启用https,而是在将Harbor放置到一个SLB的后边,配置SLB的端口转发进行访问。或者是再装一个nginx,进行nginx的端口转发。具体配置这里就不写了。

如果想做一个HA方案的话,可以按照如下的方式构建一个(主从模式真的很不靠谱):
抱光妹

负载均衡同时还要承担健康检查的任务,而Redis用于数据的缓存和消息队列的实现,MySQL存储用户信息和仓库信息,云存储用来存储Docker镜像。

配置阿里云OSS做后端存储

参考资料

https://youendless.com/post/docker_login_pass/
https://blog.51cto.com/lzlutao/2388635
https://blog.frognew.com/2017/06/install-harbor.html (这个版本已经比较老了,只能参考)

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------