什么是Harbor
Project Harbor™是一个企业级的注册服务器,用于存储和分发Docker镜像。Harbor™通过添加企业通常需要的功能(如安全性,身份和管理)来扩展开源Docker分发版。作为企业私人注册表,Harbour™提供更好的性能和安全性。使注册表更接近构建和运行环境可提高图像传输效率。Harbor™支持多个注册表的设置并在它们之间复制图像。借助Harbour™,图像存储在私人注册表中,保留了公司防火墙后面的位和知识产权。此外,Harbour™还提供高级安全功能,例如用户管理,访问控制和活动审计。
- 基于角色的访问控制 - 用户和码头库通过“项目”进行组织,用户可以在名称空间下拥有不同的图像权限。
- 图像复制 - 可以在多个注册表实例之间复制(同步)图像。非常适合负载平衡,高可用性,混合和多云场景。
- 图形用户门户 - 用户可以轻松浏览,搜索Docker存储库,管理项目/名称空间。
- AD / LDAP支持 - Harbour™与现有的企业AD / LDAP集成,用于用户验证和管理。
- 审计 - 对存储库的所有操作都被跟踪并可用于审计目的。
- 国际化 - 已经本地化为英文,中文,德文,日文和俄文。可以添加更多语言。
- RESTful API - 为Harbor™的大多数管理操作提供RESTful API。与其他管理软件的集成变得非常简单。
- 轻松部署 - 提供在线和离线安装程序。此外,还提供了用于vSphere平台(OVA)的虚拟设备。
系统要求:
在Linux主机上: docker 1.10.0+和docker-compose 1.6.0+。
虚拟机安装及配置
安装命令行自动补全
epel源
yum install epel-release -y
命令行自动补全
yum install bash-completion
设置主机名
#hostnamectl set-hostname k8s-harbor
配置IP地址
关闭防火墙服务及关闭防火墙开机自启动
[root@k8s-harbor ~]# systemctl stop firewalld
[root@k8s-harbor ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
关闭SELinux
修改/etc/selinux/config
# sed -i 's/enforcing$/disabled/g' /etc/selinux/config
# setenforce 0
时间同步自己配置好
# crontab -e
*/5 * * * * /usr/sbin/ntpdate 时间同步服务器;/usr/sbin/hwclock -w
官网安装文档
https://docs.docker.com/install/linux/docker-ce/centos/
OS要求
要安装Docker CE,您需要维护的CentOS 7版本。不支持或测试归档版本。
该centos-extras
库必须启用。此存储库默认情况下处于启用状态,但如果您已禁用它,则需要 重新启用它。
overlay2
建议使用存储驱动程序。
使用存储库进行安装
首次在新主机上安装Docker CE之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。
设置存储库
- 安装所需的包。
yum-utils
提供了yum-config-manager
效用,并device-mapper-persistent-data
和lvm2
由需要devicemapper
存储驱动程序。
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 使用以下命令设置稳定的存储库。即使您想从边缘或测试存储库安装构建,也总是需要稳定的存储 库。
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.显示有哪些稳定版本docker
$ yum list docker-ce --showduplicates | sort -r
4.安装哪个版本的docker
$ sudo yum install <FULLY-QUALIFIED-PACKAGE-NAME>
##例子:
# yum install docker-ce-17.12.0.ce-1.el7.centos.x86_64
$ sudo yum install docker-ce
5.开机自启
$ sudo systemctl enable docker.service
6.启动docker
$ sudo systemctl start docker
Docker-compose的安装
Github地址为
https://github.com/docker/compose
安装文档
https://docs.docker.com/compose/install/
版本下载页面
https://github.com/docker/compose/releases
运行此命令下载最新版本的Docker Compose:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
对二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
私有镜像仓库安装
Github地址为
https://github.com/vmware/harbor
安装文档
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
镜像下载页面https://github.com/vmware/harbor/releases
分为在线安装和离线安装
选择离线安装
下载完成之后拷贝至/opt目录
$ tar xvf harbor-offline-installer-<version>.tgz
创建300G存储镜像
# fdisk /dev/vdb
格式化分区并调整分区类型为 8e
# pvcreate /dev/vdb1
# lvcreate -l 100%VG -n mydata myvg
# mkfs.xfs /dev/mapper/myvg-mydata
修改/etc/fstab
配置参数位于文件harbor.cfg中。
harbor.cfg中有两类参数,必需参数和可选参数。
- 所需参数:这些参数需要在配置文件中设置。如果用户更新它们harbor.cfg并运行install.sh脚本重新安装Harbour,它们将生效。
- 可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动Harbour后在Web UI上进行更新。如果他们进入harbor.cfg,他们只会在首次启动海港时生效。随后对这些参数的更新harbor.cfg将被忽略。
注意:如果您选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。特别是,您必须在注册或在Harbor中创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除默认管理员用户外), auth_mode不能更改。
参数如下所述 - 请注意,至少您需要更改主机名属性。
所需参数:
- 主机名:目标主机的主机名,用于访问UI和注册表服务。它应该是目标机器的IP地址或完全限定域名(FQDN),例如
192.168.1.10
或reg.yourdomain.com
。不要使用localhost
或127.0.0.1
为主机名 - 注册表服务需要由外部客户端访问! - ui_url_protocol:(http或https,默认为http)用于访问UI和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为https。默认情况下,这是http。要设置https协议,请参阅使用HTTPS访问配置Harbour。
- db_password:用于db_auth的MySQL数据库的根密码。更改此密码以供任何生产使用!
- max_job_workers :(默认值为3)作业服务中复制工作的最大数量。对于每个图像复制作业,工作人员将存储库的所有标记同步到远程目标。增加这个数字允许系统中有更多的并发复制作业。但是,由于每个工作人员消耗了一定数量的网络/ CPU / IO资源,请根据主机的硬件资源仔细选择此属性的值。
- customize_crt:(打开或关闭,默认打开)打开此属性时,准备脚本将创建私钥和根证书,以生成/验证注册表令牌。当外部来源提供密钥和根证书时,将此属性设置为off。有关更多信息,请参阅自定义密钥和港口令牌服务证书。
- ssl_cert:SSL证书的路径,仅当协议设置为https时才适用
- ssl_cert_key:SSL密钥的路径,仅当协议设置为https时才应用
- secretkey_path:用于在复制策略中加密或解密远程注册表的密码的密钥路径。
- log_rotate_count:日志文件在被删除之前被轮转log_rotate_count次。如果count为0,则删除旧版本而不是旋转。
- log_rotate_size:日志文件只有在长度大于log_rotate_size字节的情况下才会进行旋转。如果大小后面跟着k,则大小假定为千字节。如果使用M,则大小以兆字节为单位,如果使用G,则大小以GB为单位。所以尺寸100,尺寸100k,尺寸100M和尺寸100G都是有效的。
可选参数
- 电子邮件设置:Harbor需要这些参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。另外,请注意,在默认情况下SSL连接时没有启用-如果你的SMTP服务器需要SSL,但不支持STARTTLS,那么你应该通过设置启用SSL email_ssl = TRUE。如果电子邮件服务器使用自签名或不可信证书,请设置email_insecure = true。有关“email_identity”的详细说明,请参阅rfc2595
- email_server = smtp.mydomain.com
- email_server_port = 25
- email_identity =
- email_username = sample_admin@mydomain.com
- email_password = abc
- email_from = admin sample_admin@mydomain.com
- email_ssl = false
- email_insecure = false
- harbour_admin_password:管理员的初始密码。此密码仅在Harbour首次启动时生效。之后,此设置将被忽略,管理员的密码应在用户界面中设置。请注意,默认的用户名/密码是admin / Harbor12345。
- auth_mode:使用的认证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP认证,将其设置为ldap_auth。
重要提示:从现有Harbour实例升级时,必须确保在启动新版本的Harbour之前,auth_mode与之相同harbor.cfg
。否则,升级后用户可能无法登录。
- ldap_url:LDAP端点URL(例如
ldaps://ldap.mydomain.com
)。 仅在auth_mode设置为ldap_auth时使用。 - ldap_searchdn:有权搜索LDAP / AD服务器(例如
uid=admin,ou=people,dc=mydomain,dc=com
)的用户的DN 。 - ldap_search_pwd:由ldap_searchdn指定的用户的密码。
- ldap_basedn:查找用户的基本DN,例如
ou=people,dc=mydomain,dc=com
。 仅在auth_mode设置为ldap_auth时使用。 - ldap_filter:查找用户的搜索过滤器,例如
(objectClass=person)
。 - ldap_uid:LDAP搜索过程中用于匹配用户的属性,可以是uid,cn,email或其他属性。
- ldap_scope:搜索用户的范围,即0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-LDAP_SCOPE_SUBTREE。缺省值是2。
- self_registration:(打开或关闭,默认打开)启用/禁用用户自行注册的功能。禁用时,只能由Admin用户创建新用户,只有管理员用户可以在Harbour中创建新用户。 注意:当auth_mode设置为ldap_auth时,自注册功能始终处于禁用状态,并且该标志被忽略。
- token_expiration:由令牌服务创建的令牌的到期时间(以分钟为单位),默认值为30分钟。
- project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目,设置为“adminonly”,这样只有admin可以创建项目。
这里只更改了主机名一项,其他都是默认
运行
# ./install.sh
访问http://私有库ip 即可
用户名/密码是admin / Harbor12345
由于docker不信任http 私有库是http协议
如想用私有库需在/etc/docker/daemon.json文件中加入
{
"insecure-registries": ["私有库ip"]
}
systemctl daemon-reload
systemctl restart docker
重要:由于harbor 容器restart策略为always,但是harbor是启动7个容器,实测关机后重启,有个别容器起不来。本人觉得容器启动时相互之间有依赖,导致容器起不来。想出个笨办法,如有高人,请指教下。
写个脚本,扔到/etc/rc.d/rc.local中 让其开机启动
脚本存在/opt/harbor/harbor_start.sh,赋予执行权限
#!/bin/bash
cd /opt/harbor
while true
do
harbor_count=$(docker ps|grep vmware|grep -v grep|wc -l)
[[ ${harbor_count} -ne 7 ]] && /usr/local/bin/docker-compose down || exit 0
sleep 30
/usr/local/bin/docker-compose up -d
sleep 30
done
在/etc/rc.d/rc.loacl中添加一行,并赋予执行权限即可开机启动
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/opt/harbor/harbor_start.sh