深入浅出Docker技术-基于harbor搭建企业docker 镜像仓库

    上章讲述了《docker私有库搭建过程(Registry)》 ,开源Docker Registry的有很多的不足,所以采用现在比较主流的 harbor作为Docker 镜像仓库搭建;

1. 背景

      docker中要使用镜像,一般会从本地、docker Hup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用。那么有没有一种办法可以存储自己的镜像又有安全认证的仓库呢? 

         —-> 企业级环境中基于Harbor搭建自己的安全认证仓库。

        Harbor是VMware公司最近开源的企业级Docker Registry项目, 其目标是帮助用户迅速搭建一个企业级的Docker registry服务。

2.安装: Harbor

     harbor需要安装docker和docker-compose才能使用,安装docker步骤省略,

    

    docker-dompose安装步骤如下: 

    下载最新版的docker-compose文件 

      curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose 

    添加可执行权限 

        chmod +x /usr/local/bin/docker-compose

     查看 docker-compose版本

         docker-compose –version 

   


 下载harbor离线包

      wget https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-offline-installer-v1.4.0.tgz

  安装步骤:

[root@reg ~]# tar xvf harbor-offline-installer-v1.4.0.tgz

   1.  [root@reg ~]# cd /opt/harbor/ 

   2.  [root@reg harbor]# ls 

        common  docker-compose.yml  harbor.0.5.0.tgz  harbor.cfg  install.sh  LICENSE  NOTICE  prepare 

   3.配置harbor.cfg文件:

1.  hostname= reg.docker.tb     #本机外网IP或域名,该地址供用户通过UI进行访问,不要使用127.0.0.1 
2.  ui_url_protocal = http     #配置访问协议,默认为http;如果要启动SSl认证为:https 
3.  email_server = smtp.qq.com #配置邮件服务器地址 
4.  email_server_port =25      #邮件服务器端口 
5.  email_username= xxxxx      #用户 
6.  email_password = xxxx      #密码 
7.  email_from = admin@simpletour.com   #发件人地址 
8.  email_ssl = false          #是否进行ssl加密  
9.  harbor_admin_password = Harbor12345     #harbor admin的初始密码 
10. auth_mode = db_auth   #harbor认证模式,默认为db_auth,本地mysql,也可以配置ldap认证 
11. #ldap认证方式 
12. ldap_url= ldaps://ldap.mydomain.com 
13. ldap_basedn = ou=people,dc=mydomain,dc=com 
14. ldap_uid = uid 
15. ldap_scope = 3 
16.  
17. #数据库密码 
18. db_password = root123  #默认不需要修改
19. self_registration = on 
20. use_compressed_js = on 
21. max_job_workers = 3         #最大工作进 
22. token_expiration = 30       #token过期时间,默认为30分钟 
23. verify_remote_cert = on 
24. customize_crt = on 
25.  
26. #显示的认证及组织信息 
27. crt_country = CN 
28. crt_state = State 
29. crt_location = CN 
30. crt_organization = organization 
31. crt_organizationalunit = organizational unit 
32. crt_commonname = example.com 
33. crt_email = example@example.com  
34.  
35. #可选的https证书配置地址 
36. ssl_cert = /root/cert/reg.docker.tb.crt 
37. ssl_cert_key = /root/cert/reg.docker.tb.key

    #上面启动了SSL认证,所以要创建一个CA证书[实验环境自己创建,线上环境购买就好]

    如果不使用HTTPS 直接修改hostname 和harbor_admin_password就行了; 如果详细修改,可以在安装完毕后,控制台修改配置;

执行./prepare命令

执行./install.sh 命令;

image.png

   注:默认执行上面安装后会自动启动服务;

    安装出现的小问题: 80端口被暂用;

image.png

    因为:harbor使用的是80端口,

   在公网上,一般情况下都不暴露默认端口,避免被攻击!

   以下修改harbor的默认80端口为其他端口!

   这里有一篇文章: 不详细讲述;

       https://www.cnblogs.com/huangjc/p/6420355.html

image.png

image.png

安装成功;;  访问你设置的域名地址;

image.png

如果想重启:harbor

  cd  /opt/program/tools/harbor

docker-compose stop
./install.sh

客户端使用测试 [ docker 机 ] 

  * 通过 admin 账户登陆创建 test 用户

  * 退出 admin 账户登陆 test 用户

1. 新建项目 
     我们新建一个名称为
test的项目,设置不公开。注意:当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。

image.png

  新建项目完毕后,我们就可以用test账户提交本地镜像到Harbor仓库了。例如我们提交本地nginx镜像:

2. 客户端测试:

1、admin登录

    $ docker login xx.xx.63.76

     Username: admin

      Password:

      Login Succeeded

image.png

报这个错误的都是如下2个原因:

   1、是端口错了!

   2、未在docker启动文件中添加–insecure-registry信任关系!

大多数这个错误是第2个原因,因为你没有添加信任关系的话,docker默认使用的是https协议,所以端口不对(443),会报连接拒绝这个错误;

或者提示你 "服务器给HTTPS端的是HTTP响应" 这个错误,因为你没添加端口信任,服务器认为这是默认的https访问,返回的却是http数据! 

       十分抱歉,因为我文章演示是http 方式的验证模式,SO…..;

 

解决方法:

正确的添加信任关系包括端口号:

–insecure-registry=xx.xxx.103.99

一定要把主机与端口同时添加进去!

 记住,这是harbor镜像仓库,而不是单纯的registry容器仓库!

1、在你的机器上修改文件 /etc/sysconfig/docker ,添加(或修改)字段:

    vim /usr/lib/systemd/system/docker.service

 ExecStart=/usr/bin/dockerd --insecure-registry=192.168.x.x

  修改完毕重启 docker

   service docker restart   或者  systemctl restart docker.service  

3. push 镜像到仓库

  如下:

   给镜像打tag

   docker tag your-docker-image 172.20.30.35:10080/your-repository-name/your-docker-image:tag  

   注意,your-repository-name 不能少,否则会报错:权限验证失败


  从本地PUSH 镜像到仓库

    docker push  172.20.30.35:10080/your-repository-name/your-docker-image:tag


  从仓库中 pull(拉) 镜像

  docker pull your-repository-name/your-docker-image:tag  

  或者

   docker pull 172.20.30.35:10080/your-repository-name/your-docker-image:tag