Docker镜像仓库Harbor搭建

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镜像仓库Harbor搭建

Docker镜像仓库Harbor搭建
直接访问,不需要加端口

推送镜像

此时可使用 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:

注意这里的推送要求:
Docker镜像仓库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

登录上去看看是否成功:
Docker镜像仓库Harbor搭建

其他服务器登录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 

Docker镜像仓库Harbor搭建第十四行:

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
登录成功

上一篇:docker--(仓库创建和管理)


下一篇:harbor安装与操作