一、搭建本地公有仓库
1.1 首先下载registry镜像
docker pull registry

1.2 在daemon.json文件中添加私有镜像仓库地址并重新启动docker服务
vim /etc/docker/daemon.json

1.3 运行registry容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always--name registry registry:latest

1.4 下载centos镜像
docker run centos:7 /usr/bin/bash -c ls /

1.5 为镜像打上标签并上传到仓库
docker tag centos:7 当前IP地址:5000/centos:v1
docker push 当前IP地址:5000/centos:v1

1.6 列出私有仓库的所有镜像以及centos镜像有哪些tag

1.7 删除centos镜像
docker images
docker rmi centos:7
docker rmi 容器ID号

1.8 查看所有镜像查看centos是否被删除
docker images

1.9 从仓库下载centos镜像
docker pull 192.168.10.10:5000/centos:v1
docker images

二、harbor简介
2.1 harbor定义
Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker Registry服务。
Harbor以 Docker 公司开源的Registry为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以docker容器的形式构建的,使用docker-compose来对它进行部署。用于部署Harbor的docker-compose模板位于harbor/docker-compose.yml。
2.2 harbor特性
- 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
- 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
- 支持LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
- 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
- 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
- 审计管理:所有针对镜 像仓库的操作都可以被记录追溯,用于审计管理。
- 支持RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
- Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。
2.3 harbor构成
Harbor 在架构上主要有 Proxy 、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services六个组件。
-
proxy反向代理:通过一个前置的发现代理统一接收浏览器、docker客户端的请求,并且请求转发给后端不同的服务
-
registry:负责存储docker镜像,处理docker的pull/push命令来做上传和下载
-
core services :harbor的核心功能包括:
-
ui:提供图像界面
-
webhook:网站一些服务功能(通知机制)
-
token(令牌):提供身份验证服务
-
-
log collector:负责日志(其他的组件日志、上传、下载、用户、访问)收集,以供后期进行分析和健康检查
-
database:提供数据库服务,主要记录数据库镜像的元信息以及用户的身份信息
-
job services:用于镜像复制,本地镜像可以被同步到远程harbor实例上
2.3.1 认证三种方式
- 令牌
- 用户密码
- ssl
2.4 总结
Harbor 的每个组件都是以Docker容器的形式构建的,因此,使用Docker Compose来对它进行部署。
总共分为7个容器运行,通过在docker-compose.yml所在目录中执行docker-compose ps命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中harbor-adminserver主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui所要操作的所有数据都通过harbor-adminserver这样一个数据配置管理中心来完成。
解释:adminserver(管理员):用于管理用户操作以及身份认证等
2.5 harbor实验部署
2.5.1 前期准备
| | IP地址 | 服务 |
| harbor服务器 | 192.168.10.9 | docker-ce、docker-compose、harbor-offline-v1.2.2 |
client客户端 | 192.168.10.7 | docker-ce |
---|
2.5.2 在harbor实验部署
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-\`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

2.5.3 服务端部署harbor服务
2.5.3.1 下载harbor压缩包并解压到指定位置
cd /opt/
将harbor-offline-installer-v1.2.2.tgz和docker-compose-1.25.0转移到当前xshell下
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
或者tar xf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
mv docker-compose-1.25.0 /usr/local/bin


2.5.3.2 修改harbor安装的配置文件
在配置文件下修改您当前harbor服务器的IP地址
cd /usr/local/harbor
vim /usr/local/harbor/harbor.cfg


2.5.3.3 启动harbor服务
cd /usr/local/harbor/
./prepare
./install.sh

2.5.3.4 查看harbor启动的镜像
docker-compose ps

2.5.3.5 网页登录harbor
请输入您的IP地址/harbor,然后输入用户名和密码登入harbor


2.5.3.6 创建一个项目
点击项目,新建项目输入项目名称,查看项目名称



2.5.3.7 登录harbor
docker login -u admin -p Harbor12345 http://127.0.0.1
或者 docker login -u admin -p Harbor12345 http://您当前的本机地址

2.5.3.8 下载nginx
docker pull nginx

2.5.3.9 为镜像打上标签
docker tag nginx:latest 127.0.0.1/myproject-xxx/nginx:v1
或者docker tag nginx:latest 您的IP地址/mysproejct-xxx/nginx-v1
docker images

2.5.3.10 上传镜像到仓库
docker push 127.0.0.1/myproject-xxx/nginx:v1

2.5.3.11 查看是否传送到仓库中

2.5.4 客户端操作
2.5.4.1 登录harbor仓库
docker login -u admin -p Harbor12345 http://您harbor服务器的IP地址

2.5.4.1.1 解决方式一
在**/usr/lib/systemd/system/docker.service**里编辑
vim /usr/lib/sysetmd/system/docker.service

2.5.4.1.2 解决方式二
在daemon.json里进行编辑
vim /etc/docker/daemon.json

2.5.4.2 重新启动服务,再次登录harbor
systemctl daemon-reload
systemctl restart docker
docker login -u admin -p Harbor12345 http://您当前Harbor服务器的IP地址

2.5.4.3 仓库下载镜像并查看
docker pull 您当前harbor服务器的IP地址/myproject-xxx/nginx:v1
docker images


2.5.4.4 仓库下载tomcat
docker pull tomcat

2.5.4.5 标签镜像同时上传到仓库,查看网页仓库是否上传成功
docker tag tomcat:latest 您当前harbor服务器的IP地址/myproject-xxx/tomcat:v2
docker push 您当前harbor服务器的IP地址/myproject-xxx/tomcat:v2


2.5.5 维护管理harbor仓库
2.5.5.1 创建用户


2.5.5.2 添加项目成员
点击成员,新建仓库


2.5.5.3 客户端上使用普通账户操作镜像
2.5.5.3.1 删除tomcat:v2镜像,退出harbor,然后再次用新密码登录harbor
docker rmi 您当前harbor服务器的IP地址/myproject-xxx/tomcat:v2
docker images
docker logout 您harbor服务器的IP地址
docker login -u admin -p Harbor12345 http://您当前harbor服务器的IP地址

2.5.5.3.2 上传tomcat:v3镜像,同时在网页仓库查看
docker push 您当前harbor服务器的IP地址/myproject-xxx/tomcat:v3

2.5.5.4 查看日志信息

2.5.5.5 修改Harbor.cfg配置文件
2.5.5.5.1 删除docker-compose
cd /usr/local/harbor/
docker-compose down -v

2.5.5.5.2 重新生成文件
./prepare

2.5.5.5.3 启动并运行容器
docker-compose up -d
2.5.5.6 移除Harbor服务容器同时保留镜像数据/数据库,同时进行迁移
2.5.5.6.1 删除docker-compose
docker-compose down -v

2.5.5.6.2 查看数据
ls /data/registry/docker/registry/v2/repositories/myproject-xxx/
cd /data/registry/docker/registry/v2/repositories/myproject-xxx/
ls

2.5.5.6.3 打包镜像数据
tar zcvf xxx-registry.tar.gz ./*

2.5.5.6.4 备份内容
ls
cd /usr/local/harbor/
mv /data/registry/docker/registry/v2/repositories/myproject-xxx/xxx-registry.tar.gz /opt/
