赞
踩
续我的上篇博文:https://mp.csdn.net/postedit/88721494
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
1.selinux和firewalld状态为disabled
2.各主机信息如下:
主机 | ip |
---|---|
server1(Docker,Docker-compose,Harbor) | 172.25.83.1 |
物理机(Docker客户端。之前实验安装过docker,所以这里可以直接使用,不用再安装docker) | 172.25.83.83/172.25.254.83 |
以下是安装的软件及版本:
注意:Harbor的所有服务组件都是在Docker中部署的,所以官方安装使用Docker-compose快速部署,所以我们需要安装Docker、Docker-compose。由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。
前提条件:保证,配置镜像加速器的主机可以上网。
- #物理机
- [root@foundation83 ~]# iptables -t nat -I POSTROUTING -s 172.25.83.0/24 -j MASQUERADE
- ##server1
-
- [root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- ONBOOT=yes
- BOOTPROTO=static
- IPADDR=172.25.83.1
- PREFIX=24
- GATEWAY=172.25.83.83 #设置网关地址
- DNS1=114.114.114.114 #设置DNS域名解析
- [root@server1 ~]# ping www.baidu.com #测试网络是否ok
- PING www.a.shifen.com (220.181.112.244) 56(84) bytes of data.
- 64 bytes from 220.181.112.244 (220.181.112.244): icmp_seq=1 ttl=50 time=23.0 ms
- 64 bytes from 220.181.112.244 (220.181.112.244): icmp_seq=2 ttl=50 time=23.7 ms
- 64 bytes from 220.181.112.244 (220.181.112.244): icmp_seq=3 ttl=50 time=35.0 ms
- ^C
- --- www.a.shifen.com ping statistics ---
- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms
- rtt min/avg/max/mdev = 23.070/27.307/35.090/5.513 ms
配置服务端(server1):
1 、下载并安装docker-compose
- 1、下载指定版本的docker-compose (https://github.com/docker/compose/releases)
- [root@server1 ~]# curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- 2、对二进制文件赋予可执行权限
- [root@server1 ~]# chmod +x /usr/local/bin/docker-compose
- 3、测试下docker-compose是否安装成功
- [root@server1 ~]# docker-compose version
2、下载并安装harbor(这里下载在线安装包)
从 github harbor 官网 release 页面下载指定版本的安装包。
- [root@server1 ~]# yum install wget -y
- 1、在线安装包
- [root@server1 ~]# wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz
- [root@server1 ~]# tar zxf harbor-online-installer-v1.1.2.tgz
- 2、离线安装包
- [root@server1 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.5.0/harbor-offline-installer-v1.5.1.tgz
- [root@server1 ~]# tar zxf harbor-offline-installer-v1.5.1.tgz
3、配置harbor
解压之后,目录下会生成 harbor.conf
文件,该文件就是harbor的配置文件
- [root@server1 ~]# cd harbor
- [root@server1 harbor]# vim harbor.cfg
- # hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
- 5 hostname = 172.25.83.1 #需要修改的内容。更改hostname为本机的IP地址。也可以写为域名,比如chen.org。只要前后一致即可(将后面172.25.83.1的地方换为chen.org)。
-
-
- ______________________________________________________________________________________
- 以下都是要了解的内容,不需要做任何修改
-
- # 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
- 9 ui_url_protocol = http #了解的内容
-
- # mysql数据库root用户默认密码root123,实际使用时修改下
- 12 db_password = root123 #了解的内容
-
- 15 max_job_workers = 3
- 21 customize_crt = on
- 24 ssl_cert = /data/cert/server.crt
- 25 ssl_cert_key = /data/cert/server.key
- 28 secretkey_path = /data
- 31 admiral_url = NA
-
- # 邮件设置,发送重置密码邮件时使用
- 43 email_identity =
- 45 email_server = smtp.mydomain.com
- 46 email_server_port = 25
- 47 email_username = sample_admin@mydomain.com
- 48 email_password = abc
- 49 email_from = admin <sample_admin@mydomain.com>
- 50 email_ssl = false
-
- # 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
- 55 harbor_admin_password = Harbor12345
-
- # 认证方式,这里支持多种认证方式,如LDAP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
- 59 auth_mode = db_auth
-
- # LDAP认证时配置项
- 62 ldap_url = ldaps://ldap.mydomain.com
- 72 ldap_basedn = ou=people,dc=mydomain,dc=com
- 78 ldap_uid = uid
- 81 ldap_scope = 3
- 84 ldap_timeout = 5
-
- # 是否开启自注册
- 87 self_registration = on
-
- # Token有效时间,默认30分钟
- 90 token_expiration = 30
-
- # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
- 95 project_creation_restriction = everyone
- 99 verify_remote_cert = on
4、确保80端口和443端口没有容器或服务在占用(因为启动harbor时所产生的服务要占用80端口和443端口)
- [root@server1 harbor]# docker stop registry1 #停掉之前占用443端口的容器registry1
- registry1
- [root@server1 harbor]# netstat -antulpe | grep 443 #确保443端口没有被占用
- [root@server1 harbor]# netstat -antulpe | grep 80 #确保80端口没有被占用
5、启动 Harbor
修改完配置文件后,在当前目录执行 ./install.sh
,harbor服务就会根据当前目录下的 docker-compose.yml(依赖docker -compose来执行docker-compose.yml)
开始下载依赖的镜像,检测并按照顺序依次启动各个服务,harbor依赖的镜像及启动服务如下:
[root@server1 harbor]# ./install.sh
6、web界面查看
<1>
启动完成后,我们访问刚设置的 hostname 即可 http://172.25.83.1/,默认是80端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射
我们可以点击,右上角的English,将字体调整为中文
默认用户名和密码是:admin/Harbor12345
点击"+项目",可以添加项目。我这里添加的项目的名称是my_harbor。并设置为私有项目,即只有登录了(login)的相关用户才可以进行pull和push的操作。如果勾选了"公开",则所有人都可以pull和push。
<2>
创建了私有项目之后,我们尝试上传172.25.83.1/my_harbor/rhel7:nginx4镜像(如果是域名,比如chen.org。则上传chen.org/my_harbor/rhel7:nginx4。),结果一定是失败,因为需要执行login的操作。
- [root@server1 harbor]# docker tag rhel7:nginx4 172.25.83.1/my_harbor/rhel7:nginx4
- [root@server1 harbor]# docker push 172.25.83.1/my_harbor/rhel7:nginx4
- The push refers to repository [172.25.83.1/my_harbor/rhel7]
- 9fd85e6ca660: Preparing
- 668afdbd4462: Preparing
- denied: requested access to the resource is denied #报错,镜像并没有上传成功
7、登录172.25.83.1,报错:
- [root@server1 harbor]# docker login 172.25.83.1
- Username: admin #默认用户名:admin
- Password: #默认密码:Harbor12345
- Error response from daemon: Get https://172.25.83.1/v2/: dial tcp 172.25.83.1:443: connect: connection refused #连接拒绝
这是因为 docker1.3.2 版本开始默认 docker registry 使用的是 https,我们设置 Harbor 默认 http 方式,所以当执行用 docker login、pull、push 等命令操作非 https 的 docker regsitry 的时就会报错。解决办法:
- 如果系统是MacOS,则可以点击“Preference”里面的“Advanced”在“Insecure Registry”里加上172.25.83.1,重启Docker客户端就可以了;
- 如果系统是Ubuntu,则修改配置文件/lib/systemd/system/docker.service,修改[Service]下ExecStart参数,增加--insecure-registry=172.25.83.1
- 如果系统是Centos或RedHat,可以修改配置 /usr/lib/systemd/system/docker.service(通过systemctl status docker来查看该目录),将 ExecStart 增加 --insecure-registry=172.25.83.1。
- [root@server1 harbor]# vim /usr/lib/systemd/system/docker.service
- 12 ExecStart=/usr/bin/dockerd --insecure-registry=172.25.83.1
重启docker,再次在本地执行登录操作
- [root@server1 harbor]# systemctl daemon-reload
- [root@server1 harbor]# systemctl restart docker
- [root@server1 harbor]# docker login 172.25.83.1 #或docker login -u admin -p Harbor12345 172.25.83.1
- Username: admin
- Password:
- 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 #登录成功
-
- #补充:能够登录172.25.83.1,那么当然也能退出172.25.83.1
- 命令为:docker logout 172.25.83.1 #退出登录之后/root/.docker/config.json文件中也就不再有172.25.83.1的认证记录了。当然那下一次要push或pull镜像的时候,需要重新执行login的操作。
8、上传镜像172.25.83.1/my_harbor/rhel7:nginx4(值的注意的是:镜像的名字中第二个/前面必须是172.25.83.1/my_harbor)
我们再次尝试上传172.25.83.1/my_harbor/rhel7:nginx4镜像
- [root@server1 harbor]# docker push 172.25.83.1/my_harbor/rhel7:nginx4
- The push refers to repository [172.25.83.1/my_harbor/rhel7]
- 9fd85e6ca660: Pushed #显示Pushed表示上传成功
- 668afdbd4462: Pushed
- nginx4: digest: sha256:88e96d92b032b90a2549b961928f795e59e6e125ad38785957cc694aaba2cca5 size: 73
push镜像成功之后,然后在web界面上查看镜像是否存在,并且可以对镜像进行删除等操作
点击my_harbor
点击my_harbor/rhel7,
可以看到之前上传的镜像,表示配置成功。
web界面看到的内容,也就是之前上传的镜像(172.25.83.1/my_harbor/rhel7:nginx4)。该内容和/data/registry(/data目录在harbor.cfg文件中指定过)的内容是同步的。也就是说,如果将/data/registry目录下的内容删除,web界面也就看不到相应的内容了,同时pull会失败。
当然上传的镜像以及创建的私有项目是可以删除的。点击左侧是三个小点点,进行删除的操作。
删除镜像172.25.83.1/my_harbor/rhel7:nginx4
删除创建的私有项目my_harbor
客户端测试(物理机):
在下载之前,
我们需要先获取harbor仓库类的镜像:
以及获取某个镜像的标签列表:
<1>修改文件/usr/lib/systemd/system/docker.service,并重启docker服务
- [root@foundation83 ~]# vim /usr/lib/systemd/system/docker.service
- 12 ExecStart=/usr/bin/dockerd --insecure-registry=172.25.83.1
- [root@foundation83 ~]# systemctl daemon-reload
- [root@foundation83 ~]# systemctl restart docker
<2>登录172.25.83.1
- [root@foundation83 ~]# docker login 172.25.83.1
- Username: admin #用户名admin
- Password: #密码Harbor12345
- 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
<3>下载镜像172.25.83.1/my_harbor/rhel7:nginx4
- [root@foundation83 ~]# docker pull 172.25.83.1/my_harbor/rhel7:nginx4
- nginx4: Pulling from my_harbor/rhel7
- 269521def953: Pull complete #显示Pull complete表示pull成功
- ff969636d6bb: Pull complete
- Digest: sha256:88e96d92b032b90a2549b961928f795e59e6e125ad38785957cc694aaba2cca5
- Status: Downloaded newer image for 172.25.83.1/my_harbor/rhel7:nginx4
- ##如果看不惯镜像172.25.83.1/my_harbor/rhel7:nginx4这个名字,可以改名字
- [root@foundation83 ~]# docker tag 172.25.83.1/my_harbor/rhel7:nginx4 rhel7:nginx4
- [root@foundation83 ~]# docker rmi 172.25.83.1/my_harbor/rhel7:nginx4
服务端可以上传镜像,也可以下载镜像(这里不再演示,同客户端的pull);客户端如果登录了,当然可以上传镜像(这里不再演示,同服务端的push),也可以下载镜像。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。