Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。
harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。
Harbor是VMware公司开源了企业级Registry项目, 其的目标是帮助用户迅速搭建一个企业级的Docker registry服务。
它以Docker公司开源的registry为基础,额外提供了如下功能:
- 基于角色的访问控制(Role Based Access Control)
- 基于策略的镜像复制(Policy based image replication)
- 镜像的漏洞扫描(Vulnerability Scanning)
- AD/LDAP集成(LDAP/AD support)
- 镜像的删除和空间清理(Image deletion & garbage collection)
- 友好的管理UI(Graphical user portal)
- 审计日志(Audit logging)
- RESTful API
- 部署简单(Easy deployment)
实验环境
server1 192.168.122.2
server2 192.168.122.3
server3 192.168.122.4
server4 192.168.122.5
安装
server1-3是为一个swarm集群,server4上设置harbor(其实在哪个机子上设置都是一样的,但是本身虚拟机设置的容量不够,所以分开了)
首先你需要在server4上安装docker。
之后要下载harbor的包,一般使用分为在线和离线包,下载方式和安装方式都不太相同,现在实验环境下下载了一个离线包,
下载地址https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
直接wget下来即可。
将包下载到本地后进行解压。
tar zxf harbor-offline-installer-v1.8.0.tgz
进入目录
harbor.v1.8.0.tar.gz harbor.yml install.sh LICENSE prepare
有5个文件,
harbor.v1.8.0.tar.gz这个文件中都是安装harbor所需要的镜像,不用管。
harbor.yml 这个是配置文件,进入这个文件有一些东西需要进行修改。
5 hostname: passyt.com hostname
后面可以接ip也可以接主机名,如果接主机名注意给所有机器做解析。
7 # http related config
8 http:
9 # port for http, default is 80. If https enabled, this port will redirect to https port
10 port: 80
这几行是端口为80,可以在浏览器上直接用域名进行访问。
13 https:
14 # https port for harbor, default is 443
15 port: 443
16 # The path of cert and key files for nginx
17 certificate: /etc/docker/passyt.com.crt
18 private_key: /etc/docker/passyt.com.key
这几行代表不能直接登陆,加密登陆。但是在最后两行需要进行验证。注意加密文件存放的地址不能写错。
上面两个设置存在一个即可,令一套注释掉。
27 harbor_admin_password: aekhg777
这个表示私有仓库的密码,默认一开始只有admin管理员一名用户。
30 database:
31 # The password for the root user of Harbor DB. Change this before any production us e.
32 password: aekhg777
harbor默认添加一个数据库,下面设置的是数据库的密码。
由于我选的是加密登陆,所以第二步创建自签名证书。证书可以创建在任何目录中,但是记住绝对路径,这个路径要写在上一步的配置文件中才可以生效。
openssl req -newkey rsa:4096 -nodes -sha256 -keyout passyt.com.key -x509 -days 365 -out passyt.com.crt
使用命令创建证书。
操作完成可以进行安装,回到harbor目录中使用install.sh脚本进行安装。安装过程会将目录中的所有镜像导入docker中,并且会自动生成docker-compose.yml文件,文件生成后,将继续自动部署。
安装完毕就可以查看镜像目录,发现多了很多镜像。
这个时候其实部署就已经完成harbor已经可以进行使用了。
打开浏览器,输入域名。就进入到登陆界面
这个时候只有一个管理员用户,密码是之前在配置文件中自己设置的。登陆完成进入主页面。
这个时候其实默认只有一个公开的library项目名。
这时我们可以在终端尝试进行推送镜像。
docker tag nginx:latest passyt.com/library/nginx##修改标签
[root@passyt harbor]# docker push passyt.com/library/nginx
The push refers to repository [passyt.com/library/nginx]
Get https://passyt.com/v2/: x509: certificate signed by unknown authority
这个时候会报错,因为没有找到认证文件。我们需要作的是在/etc/docker/下创建一个certs.d/的目录,在这个目录中再创建一个和域名相同的目录,在这个目录中添加签名证书。但是这个证书需要改名为ca.crt。
mkdir /etc/docker/certs.d/
cd /etc/docker/certs.d/
mkdir passyt.com
cd passyt.com/
cp /etc/docker/passyt.com.crt ca.crt
这个时候在推送
docker push passyt.com/library/nginx
The push refers to repository [passyt.com/library/nginx]
22439467ad99: Preparing
b4a29beac87c: Preparing
488dfecc21b1: Preparing
denied: requested access to the resource is denied
这时又被系统拒绝了。这是因为还需要进行登陆操作
docker login passyt.com
Username: admin
Password:
登陆完成你的所有登陆信息会被保存在/root/.docker/config.json文件中,这样就不用重复登陆,在你进行登出操作时,这个文件自动删除。
docker push passyt.com/library/nginx
The push refers to repository [passyt.com/library/nginx]
22439467ad99: Pushed
b4a29beac87c: Pushed
488dfecc21b1: Pushed
latest: digest: sha256:62f787b94e5faddb79f96c84ac0877aaf28fb325bfc3601b9c0934d4c107ba94 size: 948
登陆完成推送就可以过去了。
拉取操作就不用这么麻烦,只要有证书就可以直接进行拉取。 ##但是这种拉取只限于公共仓库内。
证书放在老地方
docker pull passyt.com/library/nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:62f787b94e5faddb79f96c84ac0877aaf28fb325bfc3601b9c0934d4c107ba94
Status: Downloaded newer image for passyt.com/library/nginx:latest
直接拉取即可。
在网页上还可以进行查看。每次拉取哪个,拉取的用户是谁。
除此之外,还可以建立新仓库。设置仓库是公开的还是私有的。也可以创建用户,两个都创建完成进入一个私有仓库,在私有仓库中设立成员。这些成员只有有权限的才可以在私有仓库中推送镜像。
推送的方法还是一样的,但是也必须要登陆才行。