HARBOR仓库安装部署

Harbor 介绍

Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目
它主要 提供 Dcoker Registry 管理UI,可基于角色访问控制, AD/LDAP 集成,日志审核等功能,完全的支持中文。
Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
安装方式:
-在线安装程序:安装程序从Docker hub下载Harbor的图像。因此,安装程序的尺寸非常小。

-脱机安装程序:当主机没有Internet连接时使用此安装程序。安装程序包含预先构建的图像,因此其大小更大。

harbor 部署

开源项目地址:https://github.com/vmware/harbor
官方安装说明:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

Docker安装

卸载老docker版本

1
2
3
4
5
6
7
8
9
10
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装 docker repository

1
2
3
4
5
6
7
8
9
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ yum list docker-ce --showduplicates | sort -r
$ sudo yum install docker-ce -y
$ systemctl start docker

安装docker-compose

1
[root@Pro harbor-1.5.3]# yum install python2-pip -y && yum install docker-compose -y

修改docker加速

1
2
3
4
5
6
7
8
9
10
11
vim /etc/docker/daemon.json 
{
"registry-mirrors": [ "https://registry.docker-cn.com",],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}

部署harbor

下载安装包并解压:

1
2
3
[root@Pro ~]# wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-online-installer-v1.6.0.tgz
[root@Pro ~]# tar -zxvf harbor-online-installer-v1.6.0.tgz
[root@Pro ~]# vi harbor/harbor.cfg

修改harbor配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@Pro ~]# vi harbor/harbor.cfg 
# hostname 设置访问地址,支持IP,域名,主机名,禁止设置127.0.0.1
hostname =harbor.idcsec.com
# 访问协议,可设置 http,https
ui_url_protocol = http
# harbor WEB UI登陆使用的密码
harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,默认是 db_auth ,mysql数据库存储认证。
# 支持 ldap 以及 本地文件存储方式。
auth_mode = db_auth
# mysql root 账户的 密码
db_password = root123
self_registration= on
use_compressed_js= on
max_job_workers= 10
verify_remote_cert= on
customize_crt= on
#其他的参数可以保持默认

配置存储后端(可选)
默认情况下,Harbor将图像存储在本地文件系统中。在生产环境中,您可以考虑使用其他存储后端而不是本地文件系统,如S3,OpenStack Swift,Ceph等。您需要更新的是storage文件中的部分common/templates/registry/config.yml

安装harbor

1
2
3
4
5
6
7
8
9
10
11
12
[root@Pro ~]# ./harbor/install.sh 
[root@Pro harbor]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/start.sh Up
harbor-db /entrypoint.sh postgres Up 5432/tcp
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up 127.0.0.1:1514->10514/tcp
harbor-ui /harbor/start.sh Up
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis docker-entrypoint.sh redis ... Up 6379/tcp
registry /entrypoint.sh /etc/regist ... Up 5000/tcp
登录仓库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@Pro harbor]# docker login  http://harbor.idcsec.com
Username: admin
Password:
Error response from daemon: Get https://harbor.idcsec.com/v2/: dial tcp 47.94.253.198:443: connect: connection refused
//配置的是http,docker login默认走的是https.

[root@Pro ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"],
"insecure-registries":["harbor.idcsec.com"],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
[root@Pro harbor]# systemctl daemon-reload && systemctl restart docker

测试push镜像到harbor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@Pro harbor]# docker login harbor.idcsec.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@Pro harbor]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
8c5a7da1afbc: Pull complete
Digest: sha256:cb63aa0641a885f54de20f61d152187419e8f6b159ed11a251a09d115fdff9bd
Status: Downloaded newer image for busybox:latest
[root@Pro harbor]# docker tag busybox:latest harbor.idcsec.com/pro/busybox:latest
[root@Pro harbor]# docker push harbor.idcsec.com/pro/busybox:latest
The push refers to repository [harbor.idcsec.com/pro/busybox]
f9d9e4e6e2f0: Pushed
latest: digest: sha256:5e8e0509e829bb8f990249135a36e81a3ecbe94294e7a185cc14616e5fad96bd size: 527

crt

配置存储

默认情况下,harbor把镜像存储在本地文件系统,在生产环境中,你可能考虑用其他的存储替代本地存储,比如S3, Openstack Swift, Ceph等等。你需要修改 common/templates/registry/config.yml 中的 storage 段。默认情况下,registrys数据被持久化在宿主机的/data/目录下可以修改docker-compose.yml /data/registry:/storage:z。甚至你删除harbor容器或者重新被创建,这部分数据也不会改变。

清理镜像空间

首先去ui界面删除不要需要的镜像,这个时候这个镜像并不会从磁盘上面清除还需要通过GC来删除。
要启用垃圾回收(GC),首先要关闭Harbor服务,然后再执行清理命令
在harbor宿主机上执行如下的命令:
使用–dry-run参数运行容器,查看到将要删除的镜像,不删除任何数据
也是直接使用docker-compose.yml里面的镜像goharbor/registry-photon:v2.6.2-v1.6.2

1
2
3
du -sh /data/registry/docker/registry/v2/
docker-compose stop
docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.1-photon garbage-collect --dry-run /etc/registry/config.yml

不使用–dry-run参数,将删除相关镜像

1
2
docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.1-photon garbage-collect  /etc/registry/config.ym
docker-compose start

https://github.com/goharbor/harbor/blob/master/docs/user_guide.md