https://azure.microsoft.com/zh-cn/blog/containers-docker-windows-and-trends/

今天这个时代当你讨论云计算时,不谈谈docker是不可想象的。各行各业的成功组织,从银行等金融组织到电子商务公司都希望能够清晰理解到底container容器是个什么,container对于运行于云端的application意味着什么,以及容器化对于他们组织的开发及IT运营场景有什么好处,他们可以如何运用。。本文中,我将从最基础的topic开始:到底什么是container,他们是如何工作的,随后转到container当前应用的最多场景,最后也会讲讲应该如何拥抱这种容器化的计算趋势,实现如何用好这种云计算开发模式无缝地实现build, test,deploy以及manage你地云计算application.

containers overview

从理论上上说,所有的computing本质上就是在一套物理资源上运行一些function完成某个特定的任务,这些资源包括cpu,memory,disk,network等。比如简单的数学计算任务或者一个分布于多个机器上的复杂application(比如exchange邮箱系统)都是这种模式:资源+软件.随着计算机技术的发展,物理硬件资源越来越强大,这导致一个问题是:资源的巨大浪费,因为每一个application实际上仅仅需要非常少的一部分资源,而它可能却独占了整台机器。这就产生了"虚拟化"的需求,虚拟的资源就是用于模拟底层物理硬件,允许多个应用同时运行在同一台机器上:每一个app都只使用物理资源的很小一部分。这些模拟技术我们称为虚拟化。当人们听到虚拟化这个词语时大多数人都想到的是virtual machine,但是需要指出的是,虚拟机器仅仅是虚拟化的一种实现。virtual memory,虚拟内存这在所有的通用OS中实现的机制,能够使得application产生它拥有所有的计算机内存的假象,甚至这种GPOS提供的virtual memory机制可以使得app能够使用比物理内存要大的多的"内存".而containers是另外一种虚拟化啊,也被称为OS virtualization.今天在Linux系统中,container给application创建了一个完全隔离和独立的OS运行环境。对于运行中的container来说,本地磁盘看起来就是一个完整干净的OS文件系统,比如/usr,/local,/etc等等目录,而其看到的内存占用情况就是一个全新重启后的OS运行情况:也就是只有OS本身在运行,在占用着内存资源。为了实现这种效果(仅有单独新OS运行和占用内存),负责创建container的host主机需要做一些非常聪明的操作并基于几个关键技术。

1. 首先是namespace isolation

命名空间包含了应用可以交互的所有资源,包括files, network ports以及running process list。namespace isolation使得Host主机能够给每个容器分配一个虚拟化的namespace,该namespace中仅仅包含了该应用可以看到的资源。有了这个视图的限制性,应用本身无法访问到不在namespace中的文件,即使本身他们可能有权限访问,因为很简单,app本身就看不到这些资源,又如何访问呢?另外app也无法列出或者访问那些不在container namespace中的应用,这使得应用本身就以为只有它自己在运行,但是实际上可能有成千上万的app在同时运行中,这不过就是一个障眼法。

为了提高效率,很多OS文件,目录以及运行中的service都是由很多container共享的,并且被投射到每个容器的namespace中。

只有当应用本身针对容器做了修改时,比如修改或者创建一个新的文件时,container会从底层的host os中获取到一个copy,并保存相应的修改。注意仅仅是修改的部分本身会被保存哦,这实际上就是docker的"copy-on-write"优化机制.这种共享机制使得在一个host主机上部署多个容器非常高效!

2. host主机控制每个container能够使用的主机资源数量.有效控制比如CPU,RAM和网络带宽这类资源可以保证每个容器能够获得它所需要的资源数量,并且容器本身的运行不会影响到其他container的运行性能。

比如,如果一个容器被限制最多只能使用10%的CPU能力,这意味着即使该容器的应用竭尽全力去抢占CPU,它也不能得到另外90%未分配给它的CPU能力!而这个90%的CPU能力host主机可以分派给其他的container容器或者host自己使用。linux实现这种控制资源使用配额的技术被称为"cgroups". 当然并不是每种场景都需要做这种严格的资源配额控制的,比如如果在一个host上所有的容器本身就是合作式的,而非竞争关系的,需要考虑标准的应对app变更的资源需求,允许标准的OS动态资源分配.那么就无需做这种控制.

由于OS虚拟化带来的快速启动的优点,和由于namespace隔离以及cgroups资源控制带来的可靠性优点使得containers非常适合于application development和testing.在开发流程中,开发人员可以快速迭代. 由于container运行的环境和资源使用情况在跨系统时完全一致,那么这一点可以保证在开发人员的环境中可以运行ok的话,就可以在生产环境中同样安全work.

快速启动和小尺寸对于云场景也有很大好处,因为app可以很快速的scale out并且能够允许更多的instance被创建(因为尺寸小,资源占用很小哦),这样更加充分地利用好有限的物理资源。

如果和使用virtumal machine的解决方案来对比,使用container会由于这种sharing带来很高的效能。

在下面使用vm方案中,host主机有三个vm,为了获得app的完全隔离特性,每个vm都有对应的OS文件,库文件和应用程序代码,以及一个有指定好内存的独占OS。启动一个新的VM需要启动一个新的OS实例,虽然host主机或者其他vm已经有了相同版本OS正在运行中,也无法共用这个OS。每个APP VM都必须吃进OS启动所需要的时间,以及OS对应消耗的内存,而这将大大降低能够起的VM个数

下面这张图则时使用container时的情况。所有的容器都共享host主机的OS,包括kernel和lib,因此这些container本身不需要启动一个OS,加载library,从而也就大大降低了memory的占用。所需要的额外资源仅仅是需要使能app运行于容器这个机制所需要的memory和disk space.由于app的环境就是一个完整独立的OS,

OCI

随着打包成docker image的应用越来越多,docker最近组织成立了Open Container Initiative的标准化组织,确保packaging的format是统一的,以便有更多的厂商加入进来,这其中就有microsoft

Windows Server和Containers

微软宣布在windows server中实现container技术。为了使得用惯了Linux docker container的开发人员在windows server container上有相同的体验,微软宣布和Docker建立战略合作,扩展Docker API和工具集以便支持windows server containers.

xiaohacontainer, docker, windows-来自微软Azure CTO的布道的更多相关文章

  1. 微软Azure开始支持Docker技术

    前一段时间还在与微软的技术人员讨论媒体转换服务的效率问题,如果应用 Docker将会有质的提高,没想到国外的Azure已经开始支持了,相信国内Azure支持也不远了.微软正在努力确保Azure成为开发 ...

  2. 微软提供了三个核心服务:Windows+Office 365+Azure

    微软提供了三个核心服务:Windows+Office 365+Azure 英语新闻来源:http://techcrunch.com/2014/11/10/microsofts-ceo-breaks-d ...

  3. 自建存储与使用微软Azure、七牛等第三方云存储综合考察分析

    http://www.cnblogs.com/sennly/p/4136734.html 各种云服务这两年炒的火热,加之可以降低成本,公司想先在部分业务上尝试使用下,刚好最近有个项目有大量小文件需要存 ...

  4. RightScale 2019年云状态报告:公共云快速增长 微软Azure增长最快

    https://www.rightscale.com/ 全球云管理服务厂商RightScale发布了年度云状态报告,今年报告的十大主要内容包括:企业在多云平台上投入巨资.公共云继续快速增长,但是私有云 ...

  5. [51CTO]反客为主 ,Linux 成为微软 Azure 上最流行的操作系统

    反客为主 ,Linux 成为微软 Azure 上最流行的操作系统 [世界上唯一确定不变的就是世界在不停的变化] 三年前,微软云计算 Azure 平台 CTO Mark Russinovich 说有四分 ...

  6. 国外物联网平台(2):微软Azure IoT

    国外物联网平台(2)——微软Azure IoT 马智 平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连接到云,从这些设备接收大规模数据 ...

  7. 走进云背后:微软Azure web 项目通过web service部署web site

    探索云那不为人知的故事(一):Web Services部署web site 前奏:Windows Azure是微软基于云计算的操作系统,现在更名为“Microsoft Azure”,和Azure Se ...

  8. 免费电子书:微软Azure基础之Azure Automation

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...

  9. 如何使用 OneAPM 监控微软 Azure Cloud Service ?

    不知不觉微软 Azure 已经进入中国市场近两年的时间.那么 Azure 平台的性能究竟如何?资源加载的延迟.虚拟机的稳定性等问题是否切实满足客户期许.这些都是大家对微软 Azure 这个国外的云服务 ...

随机推荐

  1. mysql 是否走索引问题

    问题探讨 : 当一列包含null 值时, is null  和 is not null  查询是否走索引 当用 != 时是否走索引 当用in时是否走索引 结论:当 查询范围比较小时, 以上枚举的都走索 ...

  2. SQLi-LABS Page-3 (Stacked injections) Less-38-Less-45

    Less-38 堆叠注入原理简介堆叠注入简介 Stacked injections: 堆叠注入.从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行.而在真实的运用中也是这样的, 我们知道在 ...

  3. YYLable 的使用 以及注意点

    NSString *title = @"不得不说 YYKit第三方框架确实很牛,YYLabel在富文本显示和操作方面相当强大,尤其是其异步渲染,让界面要多流畅有多流畅,这里我们介绍下简单的使 ...

  4. day35作业

    1. 查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重) -- 2.查询每个老师教授的课程数量 和 老师信息 -- 3. 查询学生的信息以及学生所在的班级信息 -- 4.学生中男生的个 ...

  5. 1、zabbix监控基础概念

    目录 为什么要使用监控? 监控怎么用? 去到一家新公司,应该如何搭建监控系统? 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛 ...

  6. pycharm安装pymysql包

    1.为什么? 每个程序连接数据库,python开发2.*版本可以直接使用MySQL,python3.*版本需要下载使用PyMySQL包才能连接数据库... 2. 怎么做? 2.1. 更改源:pycha ...

  7. 快速傅里叶变换(FFT)学习笔记

    定义 多项式 系数表示法 设\(A(x)\)表示一个\(n-1\)次多项式,则所有项的系数组成的\(n\)维向量\((a_0,a_1,a_2,\dots,a_{n-1})\)唯一确定了这个多项式. 即 ...

  8. 第02组Beta版本演示

    组长博客 组名:十一个憨比 本组组员: 学号 姓名 分工 贡献比例 181700413 黄智 写Beta冲刺的四次博客,写评审表,写word,统筹规划 9% 131700309 林闽沪 代码实现,答辩 ...

  9. [NewLife.XCode]分表分库(百亿级大数据存储)

    NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量 ...

  10. 赞!这款国产的SSH工具,好用到爆!

    之前分享 MobaXterm 时 有小伙伴留言说到了 FinalShell 我本来是一脸蒙蔽的 网上搜了一下 它们家的官网 打开官网 我一度怀疑自己进错了网站 简单(jianlou)的排版 像极了上个 ...