【Docker】Docker学习⑧ – Docker仓库之分布式Harbor
- 一、Docker简介
- 二、Docker安装及基础命令介绍
- 三、Docker镜像管理
- 四、Docker镜像与制作
- 五、Docker数据管理
- 六、网络部分
- 七、Docker仓库之单机Dokcer Registry
- 八、 Docker仓库之分布式Harbor
- 1 Harbor功能官方介绍
- 2 安装Harbor
- 3 配置Harbor
- 3.1 解压并编辑harbor.cfg
- 3.2 更新harbor配置
- 3.3 官方方式启动Harbor
- 4 配置docker使用harbor仓库上传下载镜像
- 4.1 编辑docker配置文件
- 4.2 重启docker服务
- 4.3 验证能否登录harbor
- 4.4 测试上传和下载镜像
- 4.5 验证从harbor服务器下载镜像并启动容器
- 5 实现harbor高可用
- 6 实现harbor双向同步
- 7 harbor https配置
- 九、单机编排之Docker Compose
一、Docker简介
- 参考:【Docker】Dokcer学习① – 简介
二、Docker安装及基础命令介绍
- 参考:【Docker】Docker学习② – Docker安装及基础命令介绍
三、Docker镜像管理
- 参考:【Docker】Docker学习③ – Docker镜像管理
四、Docker镜像与制作
- 参考:【Docker】Docker学习④ – Docker镜像与制作
五、Docker数据管理
- 参考:【Docker】Docker学习⑤ – Docker数据管理
六、网络部分
- 参考:【Docker】Docker学习⑥ – 网络部分
七、Docker仓库之单机Dokcer Registry
- 参考:【Docker】Docker学习⑦ – Docker仓库之单机Dokcer Registry
八、 Docker仓库之分布式Harbor
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由vmware开源,其通过添加一些企业必需的功能特性,例如:安全、标识和管理等,扩展了开源Docker Distribution。
作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。
Harbor支持安装再多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。
另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
官网地址: https://vmware.github.io/harbor/cn/
官方github地址:https://github.com/vmware/harbor/
1 Harbor功能官方介绍
- 基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里由不同的权限。
- 镜像复制:镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
- AD/LDAQ支:Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API – RESTful API:提供给管理员对于Harbor更多的操控,使得与其他管理软件集成变得更容易。
- 部署简单:提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式)虚拟设备。
2 安装Harbor
下载地址:https://github.com/vmware/harbor/releases
安装文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
- 2.1 服务器1安装docker
- 2.2 服务器2安装docker
- 2.3 下载Harbor安装包
推荐离线完整安装包:
cd /usr/local/src/wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-offline-installer-v1.2.2.tgz在线安装包:wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-online-installer-v1.2.2.tgz
3 配置Harbor
3.1 解压并编辑harbor.cfg
tar xvf harbor-offline-installer-v1.2.2.tgzln -sv /usr/local/src/harbor /usr/local/cd /usr/local/harborgrep "^[a-Z]" harbor.cfg
3.2 更新harbor配置
- 3.2.1 首次部署harbor更新
cd /usr/local/harbor./prepare#更新配置执行完后会在当前目录生成一个docker-compose.yml文件,用于配置数据目录等配置信息。
- 3.2.2 后期修改配置
如果harbor运行一段时间之后需要更改配置,则步骤如下:
停止harbor:
cd /usr/local/harbor docker-compose stopvim harbor.cfg./preparedocker-compose start
3.3 官方方式启动Harbor
- 3.3.1 官方方式安装并启动harbor
yum install python-pippip install --upgrade pippip install docker-compose./install.sh #官方构建harbor和启动方式,推荐此方法,会下载官方的docker镜像
4 配置docker使用harbor仓库上传下载镜像
4.1 编辑docker配置文件
如果配置的是https的话,本地docker就不需要有任何操作就可以访问harbor了
vim /etc/sysconfig/dockerOPTIONS='--selinux-enabled --log-driver=journald --insecure-registry 192.168.56.199'
❗↑可能是版本不对,无效
❗↓可行
[root@gbase8c_private harbor]# cat /etc/docker/daemon.json{"insecure-registries":["192.168.56.199"],"registry-mirrors":["https://pkjijpqo.mirror.aliyuncs.com"]}#其中192.168.56.199是我们部署harbor的地址,即hostname配置项值,配置完后需要重启docker服务
4.2 重启docker服务
4.3 验证能否登录harbor
docker login 192.168.56.199
日志:
[root@gbase8c_private harbor]# docker login 192.168.56.199Username: adminPassword: Login Succeeded
4.4 测试上传和下载镜像
- 4.4.1 导入镜像
docker load < /opt/nginx-1.10.3_docker.tar.gz
4.4.2 验证镜像导入成功
4.4.3 镜像打tag
修改images的名称,不修改成指定格式无法将镜像上传到harbor仓库,格式为:harborIP/项目名/image 名字:版本号
docker tag 192.168.56.199:5000/jack/nginx_1.10.3:v1 192.168.56.199/nginx/nginx_1.10.3:v1docker images
日志:
[root@gbase8c_private harbor]# docker imagesREPOSITORYTAG IMAGE IDCREATED SIZEnginx latest605c77e624dd23 months ago 141MB[root@gbase8c_private harbor]# docker tag nginx:latest 192.168.56.199/nginx/nginx:v1[root@gbase8c_private harbor]# docker imagesREPOSITORYTAG IMAGE IDCREATED SIZEnginxlatest605c77e624dd23 months ago 141MB192.168.56.199/nginx/nginx v1605c77e624dd23 months ago 141MB
4.4.4 在harbor管理界面创建项目
4.4.5 将镜像push到harbor
格式为:docker push 镜像名:版本
docker push 192.168.56.199/nginx/nginx_1.10.3:v1
日志:
[root@gbase8c_private harbor]# docker push 192.168.56.199/nginx/nginx:v1The push refers to repository [192.168.56.199/nginx/nginx]d874fd2bc83b: Pushed 32ce5f6a5106: Pushed f1db227348d0: Pushed b8d6e692a25e: Pushed e379e8aedd4d: Pushed 2edcec3590a4: Pushed v1: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
4.4.6 harbor界面验证镜像上传成功
4.4.7 验证镜像信息
4.5 验证从harbor服务器下载镜像并启动容器
- 4.5.1 更改docker配置文件
目前凡是需要从harbor镜像服务器下载image的docker服务都需要更改,不更改的话无法下载
vim /etc/sysconfig/docker4 OPTIONS='--selinux-enabled --log-driver=journald --insecure-registry 192.168.56.199'
- 4.5.2 重启docker服务
- 4.5.3 验证从harbor下载镜像
- 4.5.3.1 查看下载命令
harbor上的每个镜像里面自带pull 命令 - 4.5.3.2 执行下载
docker pull
日志:
[root@gbase8c_1 ~]# docker pull 192.168.56.199/nginx/nginx:v1v1: Pulling from nginx/nginxa2abf6c4d29d: Pull complete a9edb18cadd1: Pull complete 589b7251471a: Pull complete 186b1aaa4aa6: Pull complete b4df32aa5a72: Pull complete a0bcbecc962e: Pull complete Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3Status: Downloaded newer image for 192.168.56.199/nginx/nginx:v1192.168.56.199/nginx/nginx:v1[root@gbase8c_1 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE192.168.56.199/nginx/nginx v1605c77e624dd 23 months ago 141MB
- 4.5.3.3 验证镜像下载完成
- 4.5.3.4 启动容器
docker run -d -p 80:80 -p 443:443
- 4.5.3.5 验证端口
[root@gbase8c_1 ~]# docker run -d -p 80:80 -p 443:443 192.168.56.199/nginx/nginx:v1fd35d375abede25eb4ce538b353218ea5b3041ad2c046ce8f75ddef05d182ae5[root@gbase8c_1 ~]# ss -tnlStateRecv-Q Send-QLocal Address:Port Peer Address:PortLISTEN 0128[::]:443[::]:*LISTEN 0128[::]:80 [::]:*
5 实现harbor高可用
Harbor支持基于策略的Docker镜像复制功能,这类似于MySQL的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作。
已经有很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制的案例,本文将实现单项复制的部署。
- 5.1 新部署一台harbor服务器
- 5.2 验证登录
- 5.3 创建一个nginx项目
与主harbor项目名称保持一致 - 5.4 在主harbor服务器配置同步测试
- 5.5 点击复制规则
- 5.6 主harbor查看镜像同步状态
- 5.6 从harbor查看镜像
- 5.7 测试从harbor镜像下载和容器启动
6 实现harbor双向同步
在从harbor也配置同步规则
7 harbor https配置
openssl genrsa -out /usr/local/src/harbor/certs/harbor-ca.key 2048openssl req -x509 -new -nodes -key /usr/local/src/harbor/certs/harbor-ca.key -subj "/CN=harbor.magedu.net" -days 7120 -out /usr/local/src/harbor/certs/harbor-ca.crt
日志:
[root@gbase8c_1 harbor]# openssl genrsa -out /usr/local/src/harbor/certs/harbor-ca.key 2048Generating RSA private key, 2048 bit long modulus...................................................+++.................................................+++e is 65537 (0x10001)[root@gbase8c_1 certs]# openssl req -x509 -new -nodes -key /usr/local/src/harbor/certs/harbor-ca.key -subj "/CN=harbor.magedu.net" -days 7120 -out /usr/local/src/harbor/certs/harbor-ca.crt
九、单机编排之Docker Compose
参考:【Docker】Docker学习⑨ – 单机编排之Docker Compose