容器是如何让“一切都是代码”成为现实的

现代应用的发展在很大程度上要归功于DevOps运动的蓬勃兴起以及该运动所产生的各种自动化工具。和以往只单纯编写代码不同,开发人员如今需要考虑需要采用哪些工具,以及如何将这些工具组合起来,以便将最初的设想转变成活生生的应用。

而容器便是这种新工作流程中最重要的新工具之一。像Docker这样的新技术可以让我们捕捉到关键的服务,并将它们从底层基础设施中抽象出来。利用这种方法,我们可以重新思考如何部署应用,如何更好地发挥云基础设施的作用。

满汉全席

亚马逊近日在伦敦举办了一场用户大会,一位AWS用户描述了他的团队处理应用更新的过程,他们不再只是简单地推送一段修改后的代码,而是将“完整的基础设施”的构建过程输出给自己的客户。

一旦基础设施部署并测试完毕后便可在DNS上做切换,使其成为一个活的系统。而在其他方面,这种方法还可在运营新系统的头几天中将旧的虚拟基础设施作成备份,然后再根据需要删除之。

这样一种输送完整的基础设施的想法最初看起来似乎很荒唐,但是当你要考虑云部署的经济性时,这种方法显然要比推送更新更节约成本。它意味着你正在部署的是一个已经就绪的状态,不仅更新的服务器和服务可能已经运行了一段时间,而且连操作系统或软件都已自动更新了。

这种办法无须投资硬件。对开发、测试和生产都使用同样的云平台,需要做的只是为每种环境分配不同的虚拟网络,再加上适当的访问控制即可。你甚至可以在开发中使用生产数据,在需要清理数据时简单地克隆存储即可。

包罗万象的容器

将应用集装在Docker中,会更便于从基础设施中抽象出关键的应用元素。用这种方式处理软件,也能让DevOps充分发挥作用,更易于随着不断变化的需求对服务加以扩展。在容器中包装一个Node.js/Seneca微服务启用,便可在同一台主机或新的虚机上快速部署新的实例。

这种方法产生了一种有趣的DevOps模式:即等幂容器(idempotent container)。这种方法不是把一个应用或服务当成构建的终点,而是构建一个包含了应用、服务以及所有相关联要素的容器。任何时候只要一作出改变,就可构建一个新的容器;测试和部署容器时将其视为一个整体,而不是其中的任何单独元素。这种方法非常有意义,因为它能免除掉一般开发流程的某些弊病。在传统的开发模式中,我们很容易走捷径,只测试变化部分,而不去考虑整体。

一个容器一旦构建并部署完毕,就不会发生变化,除非又有新的容器在部署。由于一个容器就是一个沙盒,因此要想与其中的内容进行交互就得通过 API或者容器自带的UI。这使得容器成了微服务的一个理想的抽象,该服务的API是唯一的接触点。最好是将API定义为各DevOps团队之间的一份合同,如此一来,在小型服务器实例如CoreOS或微软新的Nano Server上运行的容器就会成为一种标准的基础设施构建模块。

跟着工作流走

所以,当我们看到Jenkins构建带有对Docker支持的管道工具时就不会吃惊了。Jenkins已经成了很多构建流程的标准构建工具,其定制化模块架构使其易于对特定的工作流进行调谐,易于和源代码控制工具以及开发和测试平台进行集成。

作为Cloudbees的CTO和Jenkins项目的创始人,Kohsuke Kawaguchi在一次会议上说,给Jenkins增加对Docker的支持非常合理:“这样会促进业界对Jenkins的需求,将Docker视为一种可执行的打包格式。你可以编译并打包成一个二进制对象,然后运行,不再需要的时候直接处理掉就行。”

从Kawaguchi的说法中我们显然可以看出,Docker和其他的容器格式很符合Jenkins的Cloudbees版本,“你可将其用于测试,或用于生产。测试通不过的话(+微信关注网络世界),就重构一个容器。可将代码编译成一个模块,就像Ruby一样,然后放进容器中,发送给 Puppet用于部署。”

此种做法作为整体DevOps战略的组成部分是有道理的,其中的一切,从基础设施往下都是代码。正如Kawaguchi所言,一切都是代码,“而Git和Jenkins就是砸代码钉子的锤子。”

虽然Docker的文件格式对于容器圈来说几乎已成了通用格式,但我们最好还是要观察一下Linux基金会所赞助的一个通用、开放的容器格式的进展。这一倡议把很多容器开发人员和厂商(包括微软等)聚拢到了一起。一旦一种通用格式获得业界的广泛支持,我们便能向多个云厂商(公有云 [注] 和私有云 [注] )提供容器了。

通用容器格式不可能解决管理不同云基础设施定义而遇到的所有问题。但它肯定会让各厂商之间,如Azure和AWS之间,或者 OpenStack和谷歌云之间转移服务变得更加容易。同样地,利用Puppet或Chef所描述的基础设施,或者Git库所管理的基础设施,我们就可能开发出一个转换层,为应用生成通用的虚机和网络描述,为各个云厂商提供适当的编排功能。

认为一切都不过是代码,这种想法并不新鲜,但将其纳入DevOps,则有可能使其成为现实。利用如Docker和Jenkins之类的工具一起协同工作,我们就能看到实现这一现实的曙光。

本文作者:波波编译

来源:51CTO

时间: 2024-10-21 11:33:24

容器是如何让“一切都是代码”成为现实的的相关文章

企业连容器与vm之间差异都分不清 别盲目用了

CIO们又开始一年的规划了,想做容器的不妨先看看,容器技术与虚拟机在私有云.公共云和混合云上部署的区别. 大多数的云是基于虚拟机部署的,但现在很明确的是,容器为云用户提供了显著的好处.然而,选择一种容器技术之前,重要的是要理解容器与vm(虚拟机)之间的关键差异.而最大的问题,无论是选择哪个,都要看是用于公共云.私有云还是混合云的场景. 概括来说,答案取决于三个主要因素:vm和容器之间的功能差异.私有云和公共云组件之间相互依赖的程度,以及用户的意愿,最终来定制自己的云平台. .壹. .理解容器与v

Outlook和Word中超链接都变成代码了如何解决

  对于 Outlook (以 Outlook 2010 为例) 新建一份邮件.然后在新建邮件中,单击"文件-选项". (Outlook 2007 操作与此类似.新建邮件后,按一下Office按钮,然后单击"编辑器选项" ) (1)打开"邮件"选项卡,在"邮件撰写"部分,按一下"编辑器选项"按钮. (2)在编辑器选项窗口中,单击"高级",从右边细节窗口中找到"显示域代码而非域值

设置 Eclipse 智能代码提示,大幅度减少 alt+/ 使用频率,打每个字都出现代码提示的办法

以前网上有个英文版本的,现在自己汉化一下...O(∩_∩)O 哈哈 ~     以往写java 我们往往在输入 "." 或者 alt+/ 来进行智能提示,下面这个方法,可以帮你大幅度的提高智能~ 1.打开[窗口]==[首选项]===[java]===[编辑器]===[内容辅助]===[java的自动激活触发器]===[把里面的. 改为asdf]===[应用]===[ok ] 2.打开===[文件]===[导出]===[首选项]===[下一步]===[全部导出]===[点击 全部选中]=

有一段有意思的代码-javascript现实多行信息_javascript技巧

Function.prototype.getMultiLine = function() {  var lines = new String(this);  lines = lines.substring(lines.indexOf("/*") + 3, lines.lastIndexOf("*/"));  return lines;  }  var ffff = function() {  /*  张三去倒水 天哪!  */  }  document.write(

loadrunner11录制ext开发的web网站时,无法显示录制快照,显示的都为网页代码

问题描述 loadrunner11录制ext开发的web网站时,无法显示录制快照,显示的都为网页代码 新手求解~~ 用loadrunner11 汉化版录制脚本后,显示的快照都是代码,没有图片.录制的网站除了登陆页面是html语言(登陆页面的快照可以显示),其余页面均是ext写的.将录制脚本切换到树视图时,也只有登陆页面可正常显示,其余都是包含乱码的网页代码.如何才能正常显示录制快照啊?没有快照的话,添加事务无从下手 ==

spring:如何用代码动态向容器中添加或移除Bean ?

先来看一张类图: 有一个业务接口IFoo,提供了二个实现类:FooA及FooB,默认情况下,FooA使用@Component由Spring自动装配,如果出于某种原因,在运行时需要将IFoo的实现,则FooA换成FooB,可以用代码动态先将FooA的实例从容器中删除,然后再向容器中注入FooB的实例,代码如下: 1.IFoo接口: package yjmyzz; import org.springframework.beans.factory.DisposableBean; public inte

当spring 容器初始化完成后执行某个方法

在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. 比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出哪个文件的xml文件使用了这个函数. 而在Spring的web项目中,我们可以介入Spring的启动过程.我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,这个时候我们就可以实现一个接口: 1 2 3 4 5 6 7 package com.yk.test.executor.p

CSS布局:图片在DIV中上下左右居中(水平和垂直都居中)

  CSS布局实例,这个例子相信很实用,让一个图片在Div容器中上下.左右都居中,也就是水平和垂直都居中,有用吧,平时遇到的机率挺高的,下面结合CSS和HTML来实现这个演示,请参见代码: 测试效果如下:可看到图片在Div class内水平和垂直居中:

DockOne微信分享(一四二):容器云在万达的落地经验

本文讲的是DockOne微信分享(一四二):容器云在万达的落地经验[编者的话]容器生态是现在非常火热的技术生态之一,个人认为它主要囊括着四个方面的技术栈:一是容器核心技术栈(包括 Docker.rkt 及第三方公司自主研发的容器 Engine 等):二是容器基础技术栈(包括容器网络.存储.安全及服务发现等):三是容器编排技术栈(包括 Mesos/Marathon.Swarm.Kubernetes 及 OpenShift 等):四是容器应用技术栈(主要包括 CI/CD.监控.日志及微服务框架等).