Docker学习7—企业镜像仓库Harbor

一、 Harbor的概述

Harbor是由VMWare公司开源的容器镜像仓库。Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更广泛的应用,Harbor被部署为多个Docker容器,因此可以部署在任何支持 Docker 的 Linux发行版上(registry 为其核心组件)。

1、Harbor的优势

  • 基于角色控制
  • 基于镜像的复制策略
  • 支持LDAP/AD
  • 图像删除和垃圾收集
  • 图像UI
  • 审计
  • RESTful API

2、Harbor的官方地址及组件

https://github.com/goharbor/harbor

harbor的组件

组件

功能

harbor-adminserver

配置管理中心

harbor-db

mysql数据库

harbor-jobservice

负责镜像复制

harbor-log

记录操作日志

harbor-ui

Web管理界面和API

nginx

前端代理,负责前端页面和镜像上传/下载转发

redis

会话

registry

镜像存储

二、Harbor的安装部署

1、环境要求

- linux主机(例如Centos,redhat,ubuntu等)
 - docker版本:17.06.0-ce+
 - docker-compose版本:1.18.0+
 - 服务器硬件要求:最低CPU2核,内存4G,硬盘40G;推荐CPU4核,内存8G,硬盘160G

2、安装Docker-compose

下载地址:https://github.com/docker/compose/releases/;选着自己需要的版本。
或者将docker-compose下载到本地然后上传至服务器上。
	
	cp /tmp/docker-compose-Linux-x86_64 /usr/sbin/       # 上传后将其拷贝至可执行命令目录下/usr/sbin
	chmod +x /usr/sbin/docker-compose-Linux-x86_64    # 附执行权限
	ln -s /usr/sbin/docker-compose-Linux-x86_64 /usr/sbin/docker-compose   # 对其做软连接 
	测试;

arm架构docker安装redis docker armv7_linux

3、安装harbor

下载地址:https://github.com/goharbor/harbor/releases

arm架构docker安装redis docker armv7_arm架构docker安装redis_02

因为这些是国外网站,直接在linux服务器上下载非常的慢,所以我将七下载到本地,然后再上传到服务器。
同时我也将我下载好的放到了百度网盘,地址:链接:https://pan.baidu.com/s/1rYY0zJOtE5j9MxBhOoHJcA 
提取码:44ew

01 安装部署

tar -xf harbor-offline-installer-v2.5.0.tgz -C /usr/local   # 解压到 /usr/local
cd /usr/local/harbor   # 进入解压后的目录
cp harbor.yml.tmpl harbor.yml  # 拷贝配置文件
vim harbor.yml             # 修改配置文件
	hostname: 10.1.1.142           # 此处修改为自己的域名或没域名则用服务器IP
	# http related config
	http:
	  # port for http, default is 80. If https enabled, this port will redirect to https port
	  port: 80             # 此处是http协议的80端口,如果生产使用建议修改为其他端口
	
	# https related config
	# https:                 # 此处是https(加密)协议,如果有域名的证书则可以将此处注释打开
	  # https port for harbor, default is 443
	#  port: 443                 # https协议的端口,有证书需打开此处注释
	  # The path of cert and key files for nginx
	#  certificate: /your/certificate/path      # ssl证书配置路径,需要将其存放证书路径写上,要绝对路径。
	#  private_key: /your/private/key/path   # ssl证书的密钥,需要将其存放密钥的路劲写上,要绝对路径。
	harbor_admin_password: Harbor12345     # web服务登录密码,这里可以修改

	# Harbor DB configuration
	database:    # 数据库相关配置
	  # The password for the root user of Harbor DB. Change this before any production use.
	  password: root123    # 数据库密码
	  # The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
	  max_idle_conns: 100    # 最大空闲连接
	  # The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
	  # Note: the default number of connections is 1024 for postgres of harbor.
	  max_open_conns: 900    # 最大连接
	
	# The default data volume
	data_volume: /data    # 数据目录
	location: /var/log/harbor   # 日志目录

	# 其他不配不是很重要,这里不做过多解释。

./prepare   # 配置文件修改完成后,执行初始化命令

arm架构docker安装redis docker armv7_docker_03

执行安装启动
./install.sh  # 在harbor目录下执行命令
	显示这个:✔ ----Harbor has been installed and started successfully.----   表示安装完成。

查看启动状态:

arm架构docker安装redis docker armv7_nginx_04


web方式查看:

arm架构docker安装redis docker armv7_linux_05


arm架构docker安装redis docker armv7_运维_06

4、 harbor的使用

01、配置http镜像可信任(所有docker服务器都需要配置http信任)

harbor默认的推送是https方式:
	docker tag nginx_141 10.1.1.142/library/nginx_141:V1
	docker push 10.1.1.142/library/nginx_141:V1
		此时报错如下:
			The push refers to repository [10.1.1.142/library/nginx_141]
			Get https://10.1.1.142/v2/: dial tcp 10.1.1.142:443: connect: connection refused

所以我们需要在docker服务上配置http可信任。
	[root@k8s3-142 harbor]# cat /etc/docker/daemon.json
		{
		  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
		  "insecure-registries": ["10.1.1.142"],    # 这里需要修改为仓库的http地址或域名,如果有多个则需要用","隔开,例如:"insecure-registries": ["10.1.1.142",“10.1.1.141:8000”], 
		  "log-driver": "json-file",
		  "log-opts": {
		    "max-size": "100m"
		  },
		  "storage-driver": "overlay2"
		}

再次执行推送:
	[root@k8s3-142 harbor]# docker push 10.1.1.142/library/nginx_141:V1
		The push refers to repository [10.1.1.142/library/nginx_141]
		Get http://10.1.1.142/v2/: dial tcp 10.1.1.142:80: connect: connection refused
	同样还是拒绝,原因如下:
		因重启了docker服务,所以harbor也就关闭,只需要将其打开即可:
			docker-compose up -d

再一次推送测试:

arm架构docker安装redis docker armv7_arm架构docker安装redis_07

错误提示为没有认证,需要登录仓库。
登录后再测试:

arm架构docker安装redis docker armv7_运维_08

再继续测试推送看是否成功:

arm架构docker安装redis docker armv7_arm架构docker安装redis_09

此时显示以上推送到仓库上。
web界面查看:

arm架构docker安装redis docker armv7_linux_10

如何使用刚刚推送上去的镜像那,那我再10.1.1.141上拉取刚才的镜像(前提141上也需要配置http信任):
先在10.1.1.141上登录:

arm架构docker安装redis docker armv7_nginx_11

arm架构docker安装redis docker armv7_docker_12

02 添加项目

arm架构docker安装redis docker armv7_linux_13

arm架构docker安装redis docker armv7_docker_14

03 添加用户

arm架构docker安装redis docker armv7_运维_15


arm架构docker安装redis docker armv7_docker_16

03 项目上添加用户

arm架构docker安装redis docker armv7_运维_17

arm架构docker安装redis docker armv7_linux_18