Harbor简介:
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
部署环境
1.harbor (harbor服务端,用于搭建私有仓库) IP为192.168.100.100 部署docker-ce、docker-compose(必须安装)、Harbor
2. client(客户端,用于远程访问私有仓库) IP为192.168.100.101 docker-ce
安装harbor
1.准备好docker-compose和Harbor安装包
[root@localhost ~]# ls
anaconda-ks.cfg Downloads
compose_nginx harbor-offline-installer-v1.2.2.tgz
consul initial-setup-ks.cfg
consul_0.9.2_linux_amd64.zip Music
consul-template_0.19.3_linux_amd64.zip original-ks.cfg
Desktop Pictures
docker-compose Public
docker-compose.0 Templates
docker-compose.1 Videos
Documents
cp -p docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/ //解压到/usr/local中
修改harbor的配置文件:
[root@localhost local]# vi harbor/harbor.cfg
hostname = 192.168.100.136 #修改为harbor服务器IP地址,不能使用 localhost 或者127.0.0.1
[root@localhost ~]# sh /usr/local/harbor/install.sh
[root@localhost ~]# cd /usr/local/harbor/
[root@localhost harbor]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
harbor-adminserver /harbor/harbor_adminserv Up
er
harbor-db docker-entrypoint.sh Up 3306/tcp
mysqld
harbor-jobservice /harbor/harbor_jobservic Up
e
harbor-log /bin/sh -c crond && rm Up 127.0.0.1:1514->514/tcp
-f ...
harbor-ui /harbor/harbor_ui 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
registry /entrypoint.sh serve Up 5000/tcp
/etc/
这些容器的作用:
harbor-adminserver:harbor系统管理接口,可以修改系统配置以及获取系统信息
harbor-db: 存储项目的元数据、用户、规则、复制策略等信息
harbor-jobservice: harbor里面主要是为了镜像仓库之前同步使用的
harbor-log: 收集其他harbor的日志信息。rsyslogd
harbor-ui:一个用户界面模块,用来管理registry。主要是前端的页面和后端CURD的接口
nginx:harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。是个nginx。nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,它将流量分发到后端的ui和正在docker镜像存储的docker registry
registry: 存储docker images的服务,并且提供pull/push服务。harbor需要对image的访问进行访问控制,当client每次进行pull、push的时候,registry都需要client去token服务获取一个可用的token。
redis: 存储缓存信息
webhook: 当registry中的image状态发生变化的时候去记录更新日志、复制等操作。
token service: 在docker client进行pull/push的时候今天token的发放
harbor的使用
浏览器访问harbor网页,UI界面,在harbor.cfg文件里可以找到登录UI界面的默认用户、密码
在网页harbor上新建一个公有项目zfproject,用来测试上传、下载镜像
直接访问,不需要加端口
推送镜像
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。
登录:
[root@localhost ~]# docker login -u admin -p Harbor12345 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
852e50cd189d: Pull complete
571d7e852307: Pull complete
addb10abd9cb: Pull complete
d20aa7ccdb77: Pull complete
8b03f1e11359: Pull complete
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost ~]# docker tag nginx:latest 127.0.0.1/yang/nginx:nice
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest a220279f34fa 3 days ago 537MB
127.0.0.1/yang/nginx nice bc9a0695f571 12 days ago
上传镜像到Harbor:
注意这里的推送要求:
首先要打标签:
[root@localhost ~]# docker tag nginx:latest 127.0.0.1/yangzihan/nginx:new
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest a220279f34fa 3 days ago 537MB
127.0.0.1/yang/nginx nice bc9a0695f571 12 days ago 133MB
127.0.0.1/yangzihan/nginx new bc9a0695f571 12 days ago 133MB
然后上传镜像:
[root@localhost ~]# docker push 127.0.0.1/yangzihan/nginx:new
The push refers to repository [127.0.0.1/yangzihan/nginx]
7e914612e366: Pushed
f790aed835ee: Pushed
850c2400ea4d: Pushed
7ccabd267c9f: Pushed
f5600c6330da: Pushed
new: digest: sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49 size: 1362
登录上去看看是否成功:
其他服务器登录Harbor仓库
这里会出现报错
出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误
[root@localhost ~]# docker login -u admin -p Harbor12345 http://192.168.100.100WARNING! Using --password via the CLI is insecure. Use --password-stdin.
如何解决:
在docker系统服务添加安全(第二台机子上)
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
第十四行:
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.100.100 --containerd=/run/containerd/containerd.sock #中间添加--insecure-registry 192.168.100.100
重启:
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service
[root@localhost ~]# docker login -u admin -p Harbor12345 http://192.168.100.100WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
登录成功