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. int[]里数的个数怎么由输入决定?-----动态数组。

    java中如何创建动态数组?(摘自百度知道) Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util ...

  2. 真机调试(A valid provisioning profile for this executable was not found.)

    这个问题是因为provisioning的问题,因为真机没有加入到账号下面的原因 解决步骤 1.吧identifier复制然后再平开开发中心 2.点击+号添加设备保存 3.在develope中选中保存即 ...

  3. 剑指offer 16:反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 解题思路 单链表原地反转是面试手撕代码环节非常经典的一个问题.针对一般单链表,反转的时候需要操作的是当前节点及与之相邻的其他两个节点.因而需要定 ...

  4. 安装Ubuntu系统后的配置工作

    目录 卸载webapps和LibreOffice 修改软件更新和安装的apt源 修改安装python库的pip源 安装并设置搜狗输入法 安装vim.git.pip和tweak软件 修改用户主目录下的文 ...

  5. [b0003] 总览:Hadoop 个人学习路线进展

    3.   Spark 搭建  过 1.1   搭建伪分布式2.0.1  ok 2016-10-23  耗时 2h ref  [0006] Spark 2.0.1 伪分布式搭建练手 后续: 1.2 分布 ...

  6. python中的随机模块random

    random模块是 python 中为随机数所使用的模块 ```import random # 随机生成0-1范围内的随机浮点数i = random.random()print(i) # 随机生成范围 ...

  7. (办公)vue下载excel,后台用post方法

    后台方法的参数必须是@RequestBody修饰的. 前台关键代码: axios ( { method : 'post', url : api.exportPlayTime , // 请求地址 dat ...

  8. PHP转Go系列:字符串

    字符串的赋值 在PHP中,字符串的赋值虽然只有一行,其实包含了两步,一是声明变量,二是赋值给变量,同一个变量可以任意重新赋值. $str = 'Hello World!'; $str = 'hia'; ...

  9. .Net Core使用Swagger来对接口文档化

    参考文档来源:https://www.cnblogs.com/yilezhu/p/9241261.html 官方地址 https://swagger.io/ 代码即接口文档,接口文档即代码 使用.ne ...

  10. CSS自定义字体的实现,前端实现字体压缩

    CSS中使用自定义字体,首先需要下载你需要的字体ttf或者otf文件 这里推荐一个网站:http://www.zitixiazai.org/ /********css中********/ @font- ...