基于Docker的SaaS解决方案

容器技术加速应用云化

使用Docker的开发者都知道:在日常的运维开发过程中,开发人员和运维人员最大的冲突在于版本的不一致和应用程序的隔离问题。比如说,由于企业内存在开发、测试、预发、生产等N个环境,并且不同应用的开发语言可能不同。这就很容易导致同一个应用可能会由环境差异出现各种问题或者是在同一环境里,不同的应用之间产生冲突。

图一 容器技术加速应用云化

Docker的出现很好地解决了应用的隔离和一致性交付的问题。Docker本身的含义包括两类:第一类是打包格式;第二类是一种运行方式。在主机上安装Docker之后,通过将应用打包成镜像,实现各类环境中的无差别运行,同时镜像之间相互隔离。

既然Docker具有如此之大的优势,那么我们究竟要用Docker完成什么工作呢?

图二 Docker使用情况的调研结果

上图显示的是国外的开发者针对Docker的使用情况所做的调研结果。可以清楚地看到,DevOps的接受程度越来越高,并且有统计显示,80%的DevOps会基于容器技术来做。在微服务中,Docker的隔离运行环境对于服务的管理起到了很大的帮助; 此外,Docker还可以满足云端水平扩展、恢复等动态管理应用的需求。

 

图三 在生产环境中使用Docker的挑战

那企业是否可以在生产环境中自行搭建一套完整的Docker系统呢?答案是可以。但是,在生产环境中使用Docker技术时,不仅仅是在所有的机器上装上Docker引擎这么简单。首先需要创建和管理集群;其次是安全、网络、存储等基础配置;还需要做资源的调度和编排。上述所有步骤均完成后,才形成了一套可用的容器环境。

图四 阿里云容器服务

容器技术移植到云端后又称为Container as a Service (CaaS)。类似于亚马逊的AWS或者是微软的Azure, 阿里云容器服务的本质上也是CaaS。在阿里云容器服务中首先会自动创建集群以及管理节点,使用者可以省去手工开通ECS 和网络配置的工作;同时,所有的集群管理以及安全配置都在阿里云容器服务中自动完成,无需人工介入;另外阿里云容器服务还提供了主子账号控制功能,使得企业级容器服务成为可能。

网络方面,缺省情况下,容器之间跨主机无法互通。使用者可以选择使用Docker提供的经典的Overlap网络,但需要付出巨大的性能下降的代价;或者是选择其他原生的网络工具。阿里云容器服务提供了两套网络支持:一套是基于经典网络的Overlay Network;另一套是重点推荐的阿里云VPC服务。VPC网络可以实现数据传输带宽0损耗。

在调度、编排等功能上阿里云容器服务也做了很多工作,例如容器可以挂靠在第三方的存储之上。

阿里云容器服务除了将底层的集群和节点部署在容器之外,还另外增加了两个概念。企业在日常开发中面临更多的是应用本身,阿里云容器服务将应用部署在容器中,应用中又包括多个服务,每个服务可以理解为同一镜像所生成的多个容器实例。对于开发者之前使用Docker开发的应用可以无缝迁移到阿里云容器服务中。阿里云容器镜像仓库不仅支持Docker官方全部的经典镜像,同时还提供了阿里云Docker Hub镜像。

阿里云容器部署步骤

图五 阿里云容器部署的具体步骤

经过上述的介绍,开发者难免会有疑问:使用容器部署一个应用十分复杂吗?

答案并非如此。相反地,只需简单三步,就可以实现Docker应用的上线。具体操作步骤包括三步:第一步,如果尚未部署集群,开发者首先需要一键创建集群,阿里云容器服务自动完成ECS和网络的配置;第二步,撰写部署文件,然后将该文件上传到容器控制台中;第三步,采用一键部署,即可完成应用的容器部署。其中最为关键的步骤是撰写部署文件,该文件必须是标准的Docker Compose文件。

容器应用场景

介绍完容器部署应用过程后,下面来具体看下采用容器服务的具体场景。

应用云化

图六 应用云化案例

应用云化更多的是应用容器化的过程。阿里云曾经遇到过这样一个客户,该客户是海外一个规模较大的开发商,他们所有的应用都是运行在云上的虚机镜像,同时这些应用是由多种语言开发而成,并且通过自动化运维脚本在云上完成运维工作。

当将这一套配置全部迁移到阿里云时,所遇到的最大的麻烦就是重写自动化运维脚本。该企业采用的方案是将虚机镜像直接转换为容器镜像(大部分情况下转换步骤都是非常直接的),之后采用Docker compose描述镜像之间的关系(弃用自动化运维脚本)。

DevOps

图七 通过Docker实现软件交付

应用部署在容器之后,能够完成什么样的工作呢?绝大多数开发者会用来实现DevOps。

DevOps本身并不是一个框架,它是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障部门之间的沟通、协作与整合。

容器化的DevOps实现的核心在于通过容器镜像技术实现软件交付,也就是开发人员所编写的任何代码变更,放到代码仓库以后会有一个自动的构建环境将代码护理的代码下载下来构建成一个Docker镜像。在系统集成测试、用户接受测试再到生产环境,所有的环境的变更的第一步都是从镜像仓库下拉最新的一个镜像版本。这就解决了开发和运维人员因沟通差错导致各种问题。也就是说,通过容器镜像来实现软件交付,保障了一次构建、随处运行。

因为容器服务并不直接提供DevOps,在阿里云容器服务上,提供了一套完整的模板应用,它包括一系列容器化 Jenkins Server以及一系列根据不同语言定制的 Jenkins Worker。比如现有Python和Ruby应用,可以通过 Jenkins Master、Python和Ruby的Worker镜像,结合上文提到的部署文件一键部署,实现整个 Jenkins的DevOps环境成功搭建,整个过程约在三分钟内即可完成。

SaaS应用

下面来具体看一个新闻媒体行业SaaS应用案例:

图八 新闻媒体行业SaaS应用案例

该企业主要业务是为客户提供SaaS服务,每当有新客户时,该企业都面临着下列问题:

  •  为每个客户提供定制化的服务,如何交付是个大麻烦:
    •  每个客户都需要一个二级域名,手工配置太容易出错;
    •  需要一个配置变更管理,手工更改定制应用都太混乱;
  •  从代码到交付,搭建一个DevOps环境很必要,但也很复杂。

该企业通过使用阿里云容器服务提供的DevOps环境之后,迭代的速度非常快,基本上可以做到几分钟就把所有的应用全部升级一遍。不仅为企业节省了大量的时间成本,同时也杜绝了由手工配置变更导致的人工差错。

Spring Cloud支持

图九 Spring Cloud支持

有的企业可能早已采用某种语言的框架,如Java框架。在Java中存在一种非常好的微服务框架--分布式计算框架(Spring Cloud),该框架封装了如配置管理、服务发现、断路器、智能路由、一次性 Token、全局锁、决策竞选等开源组件,十分易用。

那Spring Cloud是否可以在容器上运行呢?答案同样是肯定的。在上图所示的示例中,蓝色部分表示基于Spring Cloud的应用,黄色部分代表着阿里云的产品线,其中包含一些高可用区的配置。通过部署描述文件就可以实现一键创建跨可用区集群,实现在Docker上运行Spring Cloud。

总结

阿里云容器服务是十分标准的,大大降低企业应用上云的成本;同时针对阿里云优化集成,现有阿里云客户可以通过容器服务实现一站式应用开发;第三是全应用生命周期管理。

此外阿里云容器服务提供了包括DevOps、混合云、微服务互联网应用在内的一系列服务SaaS场景。

更多关于阿里云容器服务的相关资料:

 

本文根据阿里云技术专家净山楚煦在6月29日举办的2016云栖大会· 成都峰会上《基于Docker的SAAS解决方案》的演讲整理而成。

时间: 2024-10-10 18:56:14

基于Docker的SaaS解决方案的相关文章

Docker 监控之 SaaS 解决方案

过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐渐从 "Docker 是什么"转移到"实践 Docker"与"监控 Docker"上. 本文转自刘斌博文「如何选择 Docker 监控方案 」,文中刘斌从技术的角度深入解释了 Docker 监控的数据采集原理,介绍了现有开源的监控方案,以及能 够对

SAMI:来自三星的基于Docker和Mesos的容器解决方案(二)

本文讲的是SAMI:来自三星的基于Docker和Mesos的容器解决方案(二),[编者的话]在<SAMI:来自三星的基于Docker和Mesos的容器解决方案(一)>中我们提到,为像SAMI一样的现代IoT服务提供一个稳定安全灵活的IT环境是很有挑战性的.现在我们来探索一下,如何用Mesos和Docker过渡解决这些问题. 开始,我们决定建立一个自动化的流水线,这将使以下成为可能: 构建有容错.自愈功能的基础设施. 使用现代集群管理/分布式初始化系统,确保应用程序定义副本始终都在运行. 使用G

如何规划基于Docker的微服务?

用微服务器替代整体应用程序,或者建立新的应用程序,是开发团队日益增长的考虑因素,这些开发团队希望提高敏捷性,迭代速度更快,并跟上市场变化.通过在不同团队之间提供更大的自主权,允许他们并行工作,在更短的时间内实现更多的功能,微服务器提供的代码不那么脆弱,从而更容易进行更改,测试和更新. Docker容器适合微服务,因为它们具有自主性,自动化和便携性.具体来说,Docker以其封装特定应用程序组件及其所有依赖关系的能力而闻名,从而使团队能够独立工作,而无需底层基础架构或底层基础来支持其正在使用的每一

DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践

本文讲的是DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践[编者的话]Docker的出现,为更简便.更细粒度地对云资源的调控提供了一个强有力的支撑,WeX5开发者云基于Rancher+Docker,在如何提高物理资源利用率的课题上做了一些探索和研究,在保障用户体验良好的前提下,大大提高了物理资源的利用率,有效地降低了运营成本. 一般情况下,开发者从无到有开发一个可用于公网访问的HTML5的App应用的流程是这样的:配置开发环境.开发应用.本地调试.租用公网服务器.注

基于Docker的Tensorflow实验环境

本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案 第一篇 打造TensorFlow的实验环境 - 本文 第二篇 轻松搭建TensorFlow Serving集群 第三篇 打通TensorFlow持续训练链路 第四篇 利用Neural Style的TensorFlow实现,像梵高一样作画 第五篇 轻松搭建分布式TensorFlow训练集群(上) 机器学习作为人工智能重要的技术,已经在计算机视觉.自然语言处理.医学诊断等等领域得到了广泛的应用.TensorFlo

DockOne微信分享(七十一):基于Docker的负载均衡和服务发现

本文讲的是DockOne微信分享(七十一):基于Docker的负载均衡和服务发现[编者的话]Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用. 随着系统规模扩大,单一Docker容器不能应对压力,需要横向扩展到多个容器,我们需要考虑负载均衡的问题:单一职责的Docker容器之间需要相互通信,而容器在每一次重启之后,它的IP都可能发生变化,那么服务和服务之间如何发现对方? 这一次我们一起来交流基于Docker的负载均衡和服务发现.内容

基于Docker的Jenkins持续交付实践

讲师介绍  叶峰 有容云资深前端开发工程师   现负责有容云容器云平台Web架构设计和CI(持续集成)产品的研发 拥有丰富的Web前端开发经验.   主题简介: Jenkins pipeline基础概念 Jenkins pipeline如何带来工作便利 基于容器的Jenkins CI流程 Jenkins.Docker.Kubernetes整合的集成部署   传统交付方案   传统我们的项目开发模式是产品调研提出需求,开发团队研究决定开发方案选型.然后开始一个周期的开发,模块开发完成之后开始模块间

基于Docker API的工具综述

本文讲的是基于Docker API的工具综述,[编者的话]考虑到过去三年Docker取得的骄人成绩以及远程API的成熟,毫无疑问,Docker会成为开发者的首选平台.随着Docker的发展壮大,开发者也共享了很多围绕Docker的开源项目,本文中将讨论这些项目是如何使用Docker API的. Docker是在虚拟容器中简易部署应用最前沿技术.之前我们已经知道Docker可以减少开发维护复杂度,使得正在成长中的架构得以实践.这种架构使得整个应用以及底层操作系统以轻量级容器方式创建和部署,而不是依

OpenShift 3 : 基于Docker的私有PaaS平台

本文讲的是OpenShift 3 : 基于Docker的私有PaaS平台,[编者的话]OpenShift是一个非常有前途的私用PaaS解决方案,它可以减少从项目开始到自动构建应用和部署的时间,它支持绝大多数的Web架构,将成为基于Docker的私有PaaS平台领域的参照. OpenShift是一个私有的PaaS(Platform-as-a-Service)解决方案,主要用来在容器中搭建.部署以及运行应用程序.它是基于Apache 2.0许可的开源软件, 并且发行了两个版本, 一个是社区版, 一个