SUSE Portus + Docker Registry在Rancher环境下的部署实战

简介:

在正文之前,我们先来看一下,如果没有容器,通常会如何部署 Docker Registry?关于这个问题,我简单画了一个草图: 


wKiom1iro8zioiWiAADUvw3I1EE218.jpg


下面简单解释一下:


  • Nginx:用来做 Docker Registry 的代理和软件负载均衡Keepalived 采用主备加虚拟 IP 的方式,解决 Nginx 的单点问题,保证 Nginx 服务的高可用性。


  • Docker Registry:这是 Docker 官方开源的私有镜像仓库项目,对应 github 上的 docker-distribution 项目,也是私有镜像仓库的核心。


  • Redis:大名鼎鼎的 Key-Value 数据库,很多应用场景中,将其作为缓存使用。在 Docker Registry中也不例外,用来缓存 Docker Image 的 laryer metadata,带来的好处即是 laryer metadata 的快速访问。


  • Storage Cluster Docker Registry:以存储驱动的方式支持多种后端存储。例如:Docker Registry2.3 目前支持如下的存储驱动:


wKiom1irpA2AS2tNAADcUvuyMJw151.jpg


这里简单做个补充,官方文档也有介绍如何贡献新的 Docker Registry 存储驱动。


下面我们来看一下,在 Rancher 环境下,一个简化版 Docker Registry 的部署结构图,如下图所示: 


wKiom1irpCyCcfk2AABlBCHbfxk826.jpg


这个图是以 Rancher 下服务的视角画的,部署这样一个简单的 Docker Registry,需要四个服务,分别是外部存储服务、Redis Cache 服务、Docker Registry 服务和负载均衡服务。用户访问 Docker Registry 通过使用负载均衡服务的IP和端口。Docker Registry 的负载均衡服务,需要做源 IP会话保持配置。


到此为止,我们就在 Rancher 环境下部署了一个简化版的 Docker Registry 服务。至于我为什么说其是简化版呢?是因为现在这个版本存在一些问题。


首先,Docker Registry 本身没有 Web UI,镜像的检索,只能通过命令行工具完成,使用起来非常不方便。


其次,Docker Registry 自身没有基于角色权限访问控制,所有可以访问负载均衡服务的用户都能随意的推送和拉取镜像。


最后,Docker Registry 本身是提供了基于 token 的认证机制,需要接入 Authorization Service,这个服务官方没有实现,需要我们自己实现或者借助开源实现。


SUSE Portus 完美地解决了上述问题。下面我们看一下,在 Rancher 环境下加入 SUSE Portus的服务结构图: 

 

wKiom1irpEHyV1O6AAEUt3AJPa8308.jpg


Portus Core Cluster 服务负责给 Docker Registry 提供 token 认证服务和接收 Docker Registry 发送的镜像推送的通知,同步 Docker Registry 中的镜像信息到 SUSE Portus 的数据库中。该服务本身无状态,可以水平扩展PortusCronSync负责定时请求DockerRegistryAPI 同步镜像数据到SUSEPortus的数据库中。


当用户向 Docker Registry 推送一个镜像后,Docker Registry 会发送通知给 SUSE Portus,如果网络闪断,或者 SUSE Portu 服务中断,会做有限次数的重试。这样可能会导致 SUSE Portu 无法收到镜像推送的通知,造成两端数据的不一致。Portus Cron Sync 就是为了解决这个问题而存在的。


SUSE Portus 的 token 认证服务完全满足官方的认证模型,Docker 官方的认证模型如下图所示: 


wKiom1irpFnjsO8BAADRkPm5d80001.jpg


Docker Registry 关于认证服务的配置和通知目标服务的配置,都在 Docker Registry 容器的/etc/docker/registry/config.yml 中:


wKiom1irpHTg5_UzAABfTz-WlHU399.jpg

wKiom1irpITQJRoIAACUec9WINk023.jpg


最后,我们可以按照 Rancher Catalog 的规范,制作一些基础镜像,然后把这个服务 Catalog化,做成一键部署。 


wKioL1irpJWxdfgmAABEEaPTzuE077.jpg


本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1899717

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
5月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
2287 4
|
5月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
274 5
|
5月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
1689 8
|
5月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
4277 8
|
5月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
844 4
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境
本教程介绍如何快速搭建Docker环境,并使用Docker部署一个Nginx服务。
基于ECS快速搭建Docker环境
|
弹性计算 应用服务中间件 nginx
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境(进阶班-Day2)
安装Docker总结下来只需要4步: 1、安装Docker-CE 2、配置加速镜像(国内网络原因导致) 3、使用Docker安装Nginx服务 4、测试Nginx
1848 0
基于ECS快速搭建Docker环境(进阶班-Day2)

热门文章

最新文章