Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。
除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很 多优势:
1. 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以 用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定 传输的对象。
2. 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界 面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3. 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分 解。
4. 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限, 具有更好的安全性。
先说坑:
1.python需2.7+ 升级python并且修改/usr/bin下的pip文件,将头部python2改成python3.7(我升级的python为3.7)
2.安装harbor会出现Need to install docker-compose(1.18.0+) by yourself first and run this script again.
docker-compose版本需要1.18.0+
使用我下面的命令安装docker-compose后,运行docker-compose会报指令不存在
我是去github下载了高版本的docker-compose文件放入/usr/local/bin下。地址:https://github.com/docker/compose/releases
Harbor安装
1.安装Docker并启动Docker
2.安装docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/dockercompose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
3.给docker-compose添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
4.查看docker-compose是否安装成功
docker-compose -version
如果显示docker-compose指令不存在,可以尝试手动下载docker-compose,地址:https://www.cnblogs.com/cw828/p/11970225.html 将docker-compose文件放入/usr/local/bin中,再次执行docker-compose -version
5.下载Harbor的压缩包(版本:v1.9.2)
6.上传压缩包到linux,并解压
tar -xzf harbor-offline-installer-v1.9.2.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor
cd /opt/harbor
7.修改Harbor的配置
vi harbor.yml
8.修改hostname和port
hostname: 192.168.66.102
port: 85
9.安装Harbor
./prepare
./install.sh
10.启动Har
docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动
11.访问Harbor
ip:85
默认账户密码:admin/Harbor12345
12.在Harbor创建用户和项目
公开项目:所有用户都可以访问,通常存放公共的镜像,默认有一个library公开项目。
私有项目:只有授权用户才可以访问,通常存放项目本身的镜像。
13.创建用户
14.给私有项目分配用户
访客:对于指定项目拥有只读权限
开发人员:对于指定项目拥有读写权限
维护人员:对于指定项目拥有读写权限,创建 Webhooks
项目管理员:除了读写权限,同时拥有用户管理/镜像扫描等管理权限
15(其他服务器)把镜像上传到Harbor
1)给镜像打上标签
docker tag zgj:v1 xxxxxx(HarborIP地址):85/zgj/zgj:v1
2)推送镜像
docker push xxxxxx(HarborIP地址):85/zgj/zgj:v1
报错:The push refers to repository [xxxxxx:85/tensquare/eureka] Get https://xxxxxxx:85/v2/: http: server gave HTTP response to HTTPS client
这时会出现以上报错,是因为Docker没有把Harbor加入信任列表中
3)把Harbor地址加入到Docker信任列表
vi /etc/docker/daemon.json
{
"registry-mirrors": ["xxxxxx"],//阿里镜像地址
"insecure-registries": ["xxxxxx(HarborIP地址):85"]
}
重启docker!!!
4)再次执行推送命令,会提示权限不足
denied: requested access to the resource is denied
需要先登录Harbor,再推送镜像
5)登录Harbor
docker login -u 用户名 -p 密码 xxxxxx(HarborIP地址):85
用户名密码为刚刚设置的harbor用户
Login Succeeded!!!!!
16.(其他服务器)从Harbor上下载镜像
1)安装Docker,并启动Docker
2)修改Docker配置
vi /etc/docker/daemon.json
{
"registry-mirrors": ["xxxxxx"],//阿里镜像地址
"insecure-registries": ["xxxxxx(HarborIP地址):85"]
}
重启docker!!!
3)先登录,再从Harbor下载镜像
docker login -u 用户名 -p 密码 xxxxxx(HarborIP地址):85
docker pull xxxxxx(HarborIP地址):85/zgj/zgj:v1