harbor安装
Harbor
-
在生产运维环境中,伴随镜像和项目越来越多,单台docker主机无法支撑那么多业务,而Harbor是一个企业级镜像仓库Harbor,将作为我们容器云平台的镜像仓库中心。
1.Harbor功能
-
基于角色访问控制(RBAC)
在企业中,通常有不同的开发团队负责不同的项目,镜像像代码一样,每个人角色不同需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。
例如,开发人员需要对项目构建这就用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经理具有所有权限。 -
镜像复制
可以将仓库中的镜像同步到远程的Harbor,类似于MySQL主从同步功能。
-
LDAP
Harbor支持LDAP认证,可以很轻易接入已有的LDAP。
-
镜像删除和空间回收
Harbor支持在Web删除镜像,回收无用的镜像,释放磁盘空间。
-
图形页面管理
用户很方面搜索镜像及项目管理。
-
审计
对仓库的所有操作都有记录。
-
REST API
完整的API,方便与外部集成。
2.Harbor组件组成
组件 | 功能 |
---|---|
harbor-adminserver | 配置管理中心 |
harbor-db | Mysql数据库 |
harbor-jobservice | 负责镜像复制 |
harbor-log | 记录操作日志 |
harbor-ui | Web管理页面和API |
nginx | 前端代理,负责前端页面和镜像上传/下载转发 |
redis | 会话 |
registry | 镜像存储 |
3.环境准备工作
- 安装docker
yum install docker
- docker加速
vi /etc/docker/daemon.json # 添加如下内容
{
"registry-mirrors": ["https://registry.docker-cn.com"],
}
-
安装docker-compose
4.安装Harbor
-
这里使用离线方式安装,安装版本是harbor-offline-installer-v1.7.5.tgz
# 解压操作 tar zxvf harbor-offline-installer-v1.7.5.tgz # cd harbor cd harbor # 编辑harbor.cfg vi harbor.cfg #配置 hostname=10.0.0.132 # 这里可以输入你的域名 ui_url_protocol=http # 这是如果设置https就要自签名 harbor_admin_password = Harbor12345 # 如果配置https配置如下2个参数 ssl_cert = ./ssl/[你的域名].crt ssl_cert_key = ./ssl/[你的域名].key # 执行生成配置文件 ./prepare # 安装并启动Harbor ./install.sh
-
查看运行状态
-
如果有state为非
up
状态查看如下目录日志ls /var/log/harbor/
-
登录web界面
账号:admin 密码:Harbor12345
-
创建一个用户
-
进入library项目,将刚才用户加入进去
5.推送镜像
- 以hello-world为例我事先拉取一个镜像
docker puill hello-world
- 标记目标镜像
docker image tag hello-world 10.0.0.132/library/hello-world
# 这里注意:
docker image tag [tag名] [镜像中心域名]/[项目名称]/[镜像名称]:[版本]
示例:
docker image tag hello-world registry.ct.com/library/hello-world:latest
- push上传
docker push 10.0.0.132/library/hello-world
The push refers to a repository [10.0.0.132/library/hello-world]
Get https://10.0.0.132/v1/_ping: dial tcp 10.0.0.132:443: connect: connection refused
# 此时推送消息报错,原因没有登录
- 先登录
[root@bogon harbor]# docker login 10.0.0.132
Username: xujunkai
Password: Harbor12345
Error response from daemon: Get https://10.0.0.132/v1/users/: dial tcp 10.0.0.132:443: connect: connection refused
-
又报错,原因是Docker从1.3.X之后的docker registry交互使用HTTPS.但是我们搭建镜像默认使用HTTP服务,所以报错。
-
修改配置,
--insecure-registry [harbor主机IP]
跳过https验证vim /lib/systemd/system/docker.service
-
重启
systemctl daemon-reload && systemctl restart docker
- 重新登录,成功
[root@bogon harbor]# docker login 10.0.0.132
Username: xujunkai
Password:
Login Succeeded
- 推送镜像,成功
The push refers to a repository [10.0.0.132/library/hello-world]
f22b99068db9: Pushed
latest: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
6.下载镜像
- 由于搭建的Harbor是HTTP服务, 而Docker-cli默认HTTPS所以,需要配置harbor信任
vi /etc/docker/daemon.json # 添加如下内容
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.132"]
}
- 拉取harbor镜像
docker pull 10.0.0.132/library/hello-world
7.其他操作
# 必须要在harbor目录下
# 停止harbor
docker-compose stop
# 启动容器
docker-compose up -d
8.HTTPS自签证书
- 操作方式:
- 这里你的域名指的是:rg.harbor.com
cd harbor
mkdir ssl
cd ssl
# 生成CA根的证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
Country Name: CN
Common Name: xujunkai
其他可以不输入
# 指定仓库域名
openssl req -newkey rsa:4096 -nodes -sha256 -keyout [你的域名].key -out [你的域名].csr
Country Name: CN
Common Name: 你的域名
# 其他可以不输入
# 颁发证书
openssl x509 -req -days 365 -in [你的域名].csr -CA ca.crt -CAkey ca.key -CAcreateserial -out [你的域名].crt
openssl x509 -req -days 365 -in rg.harbor.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out rg.harbor.com.crt
- 此时会生成如下2个文件
[你的域名].crt [你的域名].key