安装过程
首先,我当你在centos7上已经装好了docker,如图:
harbor官方更推荐使用docker-compose(1.18.0+)来配合安装,于是乎我们要安装一下docker-compose,如下:
1
2
3
4
5curl -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
2wget 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
3docker-compose down -v
./prepare
docker-compose up -d
修改密码?
假设我们已经修改了密码,并且重启了docker-compose,此时用命令行的方式访问harbor镜像库(推荐使用--password-stdin
方法而不是在命令行里直接输入密码,先创建一个/root/.harborpwd
文件,里面写入harbor.yml
的harbor_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
4docker 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 (这个版本已经比较老了,只能参考)