1. 什么是Harbor

Harbor是由VMWare公司开源的容器镜像仓库

事实上,Harbor就是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用

我们都知道Docker Registry是命令行操作的,对于运维非常不友好,所以Harbor所做的扩展基本就包括了以下几个方面:

  • 管理用户界面
  • 基于角色的访问控制
  • AD/LDAP集成以及审计日志

 

Harbor的相关组件如下:

组件

功能

harbor-adminserver

配置管理中心

harbor-db

mysql数据库

harbor-jobservice

镜像复制

harbor-log

记录操作日志

harbor-ui

web页面和api

nginx

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

redis

会话

registry

镜像存储

 

2. 搭建一个harbor仓库

在搭建一个仓库之前,首先需要docker和docker-compose环境

docker-compose就是一个单机的容器编排工具,可以快速将多个容器部署到一个网络内,并且可以确定容器创建的顺序

docker之前已经安装过了,这里只写一下安装docker-compose,docker-compose就是一个二进制文件

curl -L https://get.daocloud.io/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` | sudo tee /usr/local/bin/docker-compose > /dev/null

 

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

 

下载harbor安装包

Releases · goharbor/harbor (github.com)

下载完成之后解压包

tar zxvf harbor-offline-installer-v2.4.2.tgz

 

解压之后进入到harbor目录可以看到一些文件

harbor仓库限制镜像上下传速率 harbor导入镜像_docker

 

首先需要执行prepare脚本,会拉取一些镜像到本地

./prepare

 

注意prepare脚本需要harbor.yml文件,上面那个harbor.yml.tmpl需要重命名或者复制一份为.yml格式

再安装之前需要修改一下ymal文件,主要是修改hostname为自己的ip地址即可

如果不需要https,记得把https的配置注释掉

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: <your ip>

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
#https:
  # https port for harbor, default is 443
  # port: 443
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path

# # Uncomment following will enable tls communication between all harbor components
# internal_tls:
#   # set enabled to true means internal tls is enabled
#   enabled: true

 

修改完之后就可以安装了

./install.sh

 

有个地方可能会发生错误,当然提示信息也很明显,我们已经有一个名叫redis的容器了,和harbor的redis容器冲突,所以我们需要重命名一下自己的那个redis

ERROR: for redis  Cannot create container for service redis: Conflict. The container name "/redis" is already in use by container "7fdfbb3450db2cf83b0290c6989fedb3f049f4deca99eb4328816fb603a4db5d". You have to remove (or rename) that container to be able to reuse that name.

 

安装完成之后可以查看一下各个组件的状态

docker-compose ps

 

harbor仓库限制镜像上下传速率 harbor导入镜像_redis_02

 

最后可以访问我们设置的hostname来访问harbor

默认的用户名和密码在harbor.yml文件中可以找到

默认用户:admin,密码:Harbor12345

harbor仓库限制镜像上下传速率 harbor导入镜像_harbor仓库限制镜像上下传速率_03

 

如果要向harbor推送镜像,而没有启用https的话,可能会报错拒绝访问,这时候我们需要添加一个可信任仓库地址

制作镜像的时候需要打标签,具体可见每个仓库的推送命令,会有提示

记得要先登录在push