xiaohacontainer, docker, windows-来自微软Azure CTO的布道
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的布道的更多相关文章
- 微软Azure开始支持Docker技术
前一段时间还在与微软的技术人员讨论媒体转换服务的效率问题,如果应用 Docker将会有质的提高,没想到国外的Azure已经开始支持了,相信国内Azure支持也不远了.微软正在努力确保Azure成为开发 ...
- 微软提供了三个核心服务:Windows+Office 365+Azure
微软提供了三个核心服务:Windows+Office 365+Azure 英语新闻来源:http://techcrunch.com/2014/11/10/microsofts-ceo-breaks-d ...
- 自建存储与使用微软Azure、七牛等第三方云存储综合考察分析
http://www.cnblogs.com/sennly/p/4136734.html 各种云服务这两年炒的火热,加之可以降低成本,公司想先在部分业务上尝试使用下,刚好最近有个项目有大量小文件需要存 ...
- RightScale 2019年云状态报告:公共云快速增长 微软Azure增长最快
https://www.rightscale.com/ 全球云管理服务厂商RightScale发布了年度云状态报告,今年报告的十大主要内容包括:企业在多云平台上投入巨资.公共云继续快速增长,但是私有云 ...
- [51CTO]反客为主 ,Linux 成为微软 Azure 上最流行的操作系统
反客为主 ,Linux 成为微软 Azure 上最流行的操作系统 [世界上唯一确定不变的就是世界在不停的变化] 三年前,微软云计算 Azure 平台 CTO Mark Russinovich 说有四分 ...
- 国外物联网平台(2):微软Azure IoT
国外物联网平台(2)——微软Azure IoT 马智 平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连接到云,从这些设备接收大规模数据 ...
- 走进云背后:微软Azure web 项目通过web service部署web site
探索云那不为人知的故事(一):Web Services部署web site 前奏:Windows Azure是微软基于云计算的操作系统,现在更名为“Microsoft Azure”,和Azure Se ...
- 免费电子书:微软Azure基础之Azure Automation
(此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...
- 如何使用 OneAPM 监控微软 Azure Cloud Service ?
不知不觉微软 Azure 已经进入中国市场近两年的时间.那么 Azure 平台的性能究竟如何?资源加载的延迟.虚拟机的稳定性等问题是否切实满足客户期许.这些都是大家对微软 Azure 这个国外的云服务 ...
随机推荐
- 1.java容器基本内容
目录 java容器概述 1.collection接口 (1)collection接口方法 (2)set接口实现类 (3)list接口实现类 (4)queue接口实现类 2.map接口 java容器概述 ...
- flex布局开发
flex布局开发 布局原理 flex时flexible Box的缩写,意为"弹性布局",用来为盒子模型提供最大的灵活性,任何一个容器都可以定位flex布局 [注意] 当我们为父盒子 ...
- STM32 掉电检测程序
当VDD下降到PVD阀值以下或当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断 void PVD_IRQHandler(void) { led_ctrl ...
- 10.JavaCC官方入门指南-例5
例5:计算器--添加乘除法运算 1.calculator2.jj 根据上一个例子,可知要添加乘法和除法运算是很简单的,我们只需在词法描述部分添加如下两个token: TOKEN : { < TI ...
- docker网络之(三)
docker4种网络 基于docker run创建容器时,可以使用--net选项指定容器的网络模式:Docker默认有以下4种网络模式: host模式,使用--net=host指定 container ...
- springboot + shiro + mysql + mybatis 工程快速搭建
1. 新建 springboot 工程 2. 随便起个名字 3. 初始化工程 4. 导入 shiro 和 thymeleaf 依赖 <!-- thymeleaf依赖 --> <dep ...
- Kettle 执行SQL脚本
以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 本文将对Kettle5中常用步骤字段选择(又名选择/改名值,英文原名:Select Values)进行详细解释.这个步骤的功能非常强大, ...
- 线段树set,add基础
UVA11992 Fast Matrix Operations https://www.luogu.org/problem/UVA11992 此类模板题建议随便打打就行了233....
- 2019 SDN上机第三次作业
2019 SDN上机第三次作业 实验一 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1:10.0.0.1,h2:10.0.0.2),测试两台主机之间的网络连通性 ...
- 前端/h5/React D3.js实现根据数据动态更新图形/类似进度实时变化效果
最近接到一个需求,在满足规则下,实现类似这种展示效果,其实就是用图形反映数据(NK,一种干扰值) 运行后,它其实是不断在动的,每格都可能显示灰色或者彩色 这里一共是10个格子,每格代表一个范围边界,说 ...