docker私有仓库管理系统--harbor
Harbor是Vmwar公司开源的企业级的Docker Registry管理项目,它主要提供Dcoker Registry管理UI,可基于角色访问控制, AD/LDAP 集成,日志审核等功能,完全的支持中文。
Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。 harbor共有六个容器组成:
略
登录https://github.com/vmware/harbor/releases,下载最新的harbor realease包。 本文采用offline的安装方式,下载harbor-offline-installer-v1.5.1.tgz
如果为nginx开启ssl,即需要如下操作:
$ mkdir –p /data/harbor/cert
$ cd /data/harbor/cert
执行如下命令生成证书
$ openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout server.key -out server.crt
输入如下信息:
-----
#国家简称
Country Name (2 letter code) [XX]:cn
#省份全称
State or Province Name (full name) []:beijing
#城市
Locality Name (eg, city) [Default City]:beijing
#组织或公司名称
Organization Name (eg, company) [Default Company Ltd]:test
#部门名称
Organizational Unit Name (eg, section) []:IT
#网站域名
Common Name (eg, your name or your server's hostname) []: *.test.com
#邮箱地址
Email Address []:mail@thomore.com
#输入密码
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
#可选的公司名称
An optional company name []:
1.将harbor-offline-installer-v1.5.1.tgz上传到/data/harbor
$ tar zxvf harbor-offline-installer-v1.5.1.tgz
$ mv harbor harbor1.5.1
$ cd /data/harbor/harbor1.5.1 2.修改harbor.cfg,如下内容,其他可以默认
hostname = 192.168.119.119
ui_url_protocol = http #如果选https则需要加载密钥
ssl_cert = /data/cert/thomore.crt
ssl_cert_key = /data/cert/thomore.key
secretkey_path = /data/harbor/cert
3.修改docker-compose.yml,主要是自定义里面的volumes /data/registry database config等 注意:该文件中的secretkey文件所在目录
adminserver:
image: vmware/harbor-adminserver:v1.5.1
container_name: harbor-adminserver
env_file:
- ./common/config/adminserver/env
restart: always
volumes:
- /data/harbor/volume/config/:/etc/adminserver/config/:z
- /data/harbor/volume/secretkey:/etc/adminserver/key:z
- /data/harbor/volume/:/data/:z
必须要和harbor.cfg文件中的相一致,否则启动报错
secretkey_path = /data/harbor/volume
4.修改默认80端口 $ vi docker-compose.yml
proxy:
image: vmware/nginx-photon:v1.5.1
container_name: nginx
restart: always
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
ports:
- 1080:80
- 443:443
- 4443:4443
$ vi common/templates/registry/config.yml
auth:
token:
issuer: harbor-token-issuer
realm: $public_url:1080/service/token
如果出现下面的错误说明该两处没有更改一致。
Error response from daemon: Get http://test.com:1080/v2/: received unexpected HTTP status: 503 Service Unavailable
5.执行准备脚本 $ ./prepare 6.执行安装脚本 $ ./install 7.等待完成即可。
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://192.168.119.119 .
For more details, please visit https://github.com/vmware/harbor .
登录配置的页面
管理员登录后,会看到如下模块:
注意:非系统管理员用户登录,只能看到有权限的项目和日志,其他模块不可见。
管理员登录->点击项目->点击+项目
设为不公开.
注意:当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。
1.管理员登录系统->点击系统管理->点击用户管理->点击+用户 2.填下如下信息,确定即可增加用户
3.分配该用户拥有刚才创建的项目dev的权限
命令行登录: $ docker login 192.168.119.119 会报如下错误:
Error response from daemon: Get https://192.168.119.119/v1/users/: dial tcp 192.168.119.119:443: getsockopt: connection refused
此时,需要做如下配置: 1.加入私有仓库地址 $ vi /etc/docker/daemon.json 如下内容是多个私有仓库的配置
{
"insecure-registries": ["192.168.119.119","test.com:1080"]
}
2.执行如下命令,重启docker
systemctl daemon-reload && service docker restart
配置完成后就可以登录了。
3.另外,daemon.json还可以加上镜像加速地址:
{
"registry-mirrors": ["http://harbor.test.com"], #镜像加速地址
"insecure-registries": ["harbor.test.com","192.168.119.119:1080"], #非SSL源管理镜像。
"max-concurrent-downloads": 10
}
现在,我们用刚刚创建的用户dev1,push我们的镜像ubuntu到dev项目 1.使用dev1用户登录
$ docker login 192.168.119.119
Username (admin): dev1
Password:
Login Succeeded
2.给已有的镜像ubuntu,重新打tag
$ docker tag ubuntu 192.168.119.119/dev/ubuntu:v1
3.push镜像
$ docker push 192.168.119.119/dev/ubuntu:v1
The push refers to a repository [192.168.119.119/dev/ubuntu]
49907af65b0a: Mounted from ubuntu/ubuntu
4589f96366e6: Mounted from ubuntu/ubuntu
b97229212d30: Mounted from ubuntu/ubuntu
cd181336f142: Mounted from ubuntu/ubuntu
0f5ff0cf6a1c: Mounted from ubuntu/ubuntu
v1: digest: sha256:48c25f0391322e4d9f32c4326c1ec37edb9663382afafa3e6cb20dc2a45be01e size: 1357
4.dev1用户登录系统后即可看到自己上传的镜像
Harbor私有仓库运行一段时间后,仓库中存有大量镜像,会占用太多的存储空间。直接通过Harbor界面删除相关镜像,并不会自动删除存储中的文件和镜像。需要停止Harbor服务,执行垃圾回收命令,进行存储空间清理和回收。 1.先在Harbor UI图形界面中删除不需要的镜像 2.停止Harbor相关服务
$ cd <harbor_dir>
$ docker-compose stop
3.使用--dry-run参数运行容器,预览运行效果,但不删除任何数据 首先查看是否存在镜像vmware/registry-photon:v2.6.2-v1.5.1,不同版本会有不同的tag,否则会重新拉取最新的镜像.
$ docker run -it --name gc --rm --volumes-from registry vmware/registry-photon:v2.6.2-v1.5.1 garbage-collect --dry-run /etc/registry/config.yml
4.不使用--dry-run参数,将删除相关的文件和镜像
$ docker run -it --name gc --rm --volumes-from registry vmware/registry-photon:v2.6.2-v1.5.1 garbage-collect /etc/registry/config.yml
5.重新启动Harbor相关服务
$ docker-compose start
完