Harbor 介绍
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
环境、软件准备
Linux CentOS 7.3
Docker(version:1.12.6)
Docker-compose(version:1.17.1)
Harbor (version:1.1.2)
docker 安装
docker安装步骤在另一篇文章汇总有描述:docker安装、操作常用命令。
docker-compose安装
pip install -U docker-compose
Harbor 服务搭建
下载Harbor安装文件
从 github harbor 官网 release 页面下载指定版本的安装包。
wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz
tar xvf harbor-online-installer-v1.1.2.tgz
配置Harbor
解压缩之后,目录下会生成harbor.cfg文件,该文件就是Harbor的配置文件。
# 1. hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
# 2. 默认情况下,harbor使用的端口是80,若使用自定义的端口,除了要改docker-compose.yml文件中的配置外,
# 这里的hostname也要加上自定义的端口,都在在docker login、push时会报错
hostname = 10.0.11.150:5000
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root123
#Maximum number of job workers in job service
max_job_workers = 3
#The path of secretkey storage
secretkey_path = /data
# 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
# 若修改了此处的admin登录密码。则登录后台时使用修改后的密码
harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth
# 是否开启自注册
self_registration = on
# Token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone
注:这里只摘录了部分配置项,详细的配置项可以在harbor.conf文件中查看,并且都有解释
更改端口号
由于habor默认使用80端口,而80端口又比较特殊,可能别的地方也会用到,那么我们就需要更改一下端口进行启动使用。
打开 docker-compose.yml(此处只摘录需要修改端口号的部分配置):
proxy:
image: vmware/nginx:1.11.5-patched
container_name: nginx
restart: always
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
ports:
- 5000:80 # 修改端口号则修改此处,前面的位宿主机的端口,后面的是容器中的端口,只修改前面的即可
- 443:443
- 4443:4443
depends_on:
- mysql
- registry
- ui
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
如上面配置中的注释所说,原来的端口映射为:80:80
,此处我修改为5000:80
,根据需要修改即可。最重要的是,此处修改完之后,一定要将harbor.conf
配置文件中的hostname一块修改下,改成:ip:port
。ip就是部署harbor
的机器IP,port就是这里设置的端口号。
更改挂载私有库镜像目录
一般情况下,我们都会将容器启动的私有仓库服务中的镜像保存目录挂载到宿主机上的某个目录,这样能够保存镜像文件,使仓库镜像不易流失。在harbor中也有配置会指定目录挂载的映射关系。
打开 docker-compose.yml(此处只摘录需要修改挂载目录的部分配置):
registry:
image: vmware/registry:2.6.1-photon
container_name: registry
restart: always
volumes:
- /data/docker/registry:/storage:z # 看这里,挂载目录就是修改这行配置
- ./common/config/registry/:/etc/registry/:z
networks:
- harbor
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
从上面的配置及注释知道需要修改那块配置了。/data/docker/registry:/storage:z
,这里默认的挂载目录是/var/lib/registry
,我修改成了/data/docker/registry
,即只需要修改前半部分即可,可根据自己需要修改,其他地方不需要改动。
启动 Harbor
修改完配置文件后,在当前目录执行./install.sh
,Harbor
服务就会根据当期目录下的docker-compose.yml
开始下载依赖的镜像,检测并按照顺序依次启动各个服务。
注:可能下载下来的文件中,install.sh没有执行的权限,所有需要更改权限
# 添加执行权限(需要sudo)
chmod 755 install.sh
# 同时需要修改下面这个文件的权限,否则执行会报错
chmod 755 prepare
下面这张图是开始进行harbor部署的执行情况:
查看harbor后台
登录界面(使用配置文件中写的密码登录):
首页:
操作命令
待脚本跑完之后使用docke-compose ps
即可查看,常用命令包含以下几个:
后台启动,如果容器不存在根据镜像自动创建
docker-compose up -d
停止容器并删除容器
docker-compose down -v
启动容器,容器不存在就无法启动,不会自动创建镜像
docker-compose start
停止容器
docker-compose stop
注:其实上面是停止docker-compose.yml
中定义的所有容器,默认情况下docker-compose
就是操作同目录下的docker-compose.yml
文件,如果使用其他yml文件
,可以使用-f
自己指定。
docker-compose -f docker-compose.yml stop
可能出现的问题
Harnor
安装启动完毕之后,我们就可以去上传下载镜像了。这时,我们可能会去登录。如下操作命令:
# 在服务器上,进行pull、push操作前可能需要进行登录,就是使用下面这个语句
docker login 10.0.11.150:5000
这时有可能会出现下面这个报错:
pull
、push
操作时也可能会出现。
解决方法(CenOS7):
打开/etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -H'
在这行配置后面添加:
--insecure-registry 10.0.11.150:5000
10.0.11.150:5000
:harbor登录链接
重启docker
即可
systemctl restart docker
注意:最好集群中所有节点都添加上这句,这样每个节点在pull
、push
时都会正常了。