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. Python中全局变量的引用与修改之格式影响

    先来看下面的代码及执行结果: a = 1 b = [2,3] def nums(): a = 2 b[0] = 0 print(a) print(b) print(a) print(b) nums() ...

  2. Javase之集合体系(3)之Set及其子类知识

    集合体系之Set及其子类知识 Set(接口) public interface Set<E>extends Collection<E> ​ 特点:无序(存储顺序与取出顺序不一致 ...

  3. 滑动门出现的背景---实例微信导航栏(a盒子里面包span盒子,文字写在span里)

    需求: 制作网页时,为了美观,常常需要为网页元素设置特殊形状的背景,比如微信导航栏,有凸起和凹下去的感觉,其中最大的问题是字数不同,如何做? 解决: 用一个a包含span来制作,字数放在span里面. ...

  4. 交互式shell脚本web console

    官网:http://web-console.org/ 这个脚本可以实现web下交互,也就是有了这玩意后可以不用反弹shell了. <?php // Web Console v0.9.7 (201 ...

  5. [PHP] vscode配置SFTP扩展同步文件

    在我们的项目开发过程中,经常有一种模式,有一台linux的开发机作为我们的测试机器,上面安装了ftp服务.我们在windows系统的本地机器使用IDE编写代码,自动或者保存时同步上传到测试机下,这样就 ...

  6. Docker Harbor

    简介: Harbor是一个用于存储Docker镜像的企业级Registry服务:本章将介绍如何搭建Harbor Registry! Github官方安装文档: https://github.com/g ...

  7. CodeForces - 1256D (贪心+思维)

    题意 给定一个长度为n的二进制串(即由n个'0'和'1'构成的字符串),你最多可以进行k次交换相邻两个字符的操作,求字典序最小的串. 思路 大致就是找0的位置,然后贪心的放到最前面,这样字典序会最小: ...

  8. 攻防世界pwn之新手区

    涉及的工具有 Ubuntu 16.04 pwntools IDA gdb-peda 1.get_shell 连接就给flag,可以直接用nc连接,然后输入ls查看里面的目录,发现有名字叫flag文件, ...

  9. python 异常try/except语句

    异常模式的写法 try: 执行正常的模块 except X: 执行异常X的代码 except: 其他的异常执行模块except 必须在except X之后 else: 没有异常,则会执行完try,而后 ...

  10. react细节

    1.在函数式组件中使用 类型和默认值 function App({ name }) { return ( <div> <h1>{name}</h1> </di ...