zoukankan      html  css  js  c++  java
  • 认识Docker

      以下是个人学习过程中所记,仅作为学习经历和备忘,有问题不负责,但可以交流和探讨。

    1 什么是Docker?

    这里写图片描述

      在Docker的官网,Docker的设计师们对Docker的定义是: 
      Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. As a result, IT can ship faster and run the same app, unchanged, on laptops, data center VMs, and any cloud.

      Docker是为开发者和系统管理员提供的一套用于创建、发布和运行分布式应用的开放平台。它由Docker引擎(一个可移植的轻量级运行环境和打包工具)和Docker Hub(用于分享应用和提供自动化工作流的云服务)组成。Docker可以通过组件快速地组合成应用,并且减少开放、QA和发布环境之间的摩擦。最终,IT工程师能快速地将应用毫无更改地发布到笔记本、数据中心的虚拟机和所有的云环境上。

      Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上, 基于Go语言并遵从Apache2.0协议开源。Docker在2014年6月召开DockerConf 2014技术大会吸引了IBM、Google、RedHat等业界知名公司的关注和技术支持,无论是从 GitHub 上的代码活跃度,还是Redhat宣布在RHEL7中正式支持Docker, 都给业界一个信号,这是一项创新型的技术解决方案。就连 Google 公司的 Compute Engine 也支持 docker 在其之上运行, 国内“BAT”先锋企业百度Baidu App Engine(BAE)平台也是以Docker作为其PaaS云基础。

      Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行,最重要的是,它不依赖于任何语言、框架或系统。

      通俗的讲就是让软件开发人员无需关心团队中每个人使用的操作系统,不必担心开发环境不一样,即开发团队中的每一个人都有一个一模一样的开发环境复制品,并且这个复制品是可以扩展的,这听起来感觉很不可思议,似乎虚拟机也能够做到,比如说VMWare、VirtualBox,装好虚拟机,然后装个系统,然后在系统中将开发环境搭建好后,然后将这个系统Clone给每个开发人员,这样就做到了开发环境一模一样了。而且可以实现多个互不影响的开发环境。

      对于个人而言,如果这是个利器,那么以后想要重装系统什么的,只需要安装上Docker,那么在原来的系统Docker上已经配置好了的开发环境,只需要Clone一下就OK了,这是多么的方便,要是在开发的使用上,也没有占用很大的内存,这是非常不错的选择。

    2 Docker和虚拟机

      既然虚拟机和Docker都能达到同样的效果,那么接下来对比下,来让你做出一些选择。

      Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。

    这里写图片描述

      从虚拟化层面来看,传统虚拟化技术(虚拟机)是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而可提供更轻量级的虚拟化,实现进程和资源的隔离。从架构来看,Docker比虚拟化少了两层,取消了Hypervisor层和Guest OS层,使用Docker Engine进行调度和隔离,所有应用共用主机操作系统,因此在体量上,Docker较虚拟机更轻量级,在性能上优于虚拟化,接近裸机性能。从应用场景来看,Docker和虚拟化则有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣。

    3 Docker的应用场景?

      上面说的给团队的中每一个成员复制一份一模一样的开发环境,这是一个应用, 
      这里先介绍几个概念知识:PaaS、SaaS、CaaS、IaaS。 
      PaaS是Platform-as-a-Service的缩写,意思是平台即服务。把服务器平台作为一种服务提供的商业模式。通过网络进行程序提供的服务称之为SaaS(Software as a Service),而云计算时代相应的服务器平台或者开发环境作为服务进行提供就成为了PaaS(Platform as a Service)。所谓PaaS实际上是指将软件研发的平台(计世资讯定义为业务基础平台)作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。在2007年国内外SaaS厂商先后推出自己的PAAS平台。

      CaaS,即Docker Containers as a Service ,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。 
      SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。SaaS 应用软件的价格通常为“全包”费用,囊括了通常的应用软件许可证费、软件维护费以及技术支持费,将其统一为每个用户的月度租用费。

      IaaS,Infrastructure as a Service,即基础设施即服务。 消费者通过Internet 可以从完善的计算机基础设施获得服务。这类服务称为基础设施即服务。基于 Internet 的服务(如存储和数据库)是 IaaS的一部分。Internet上其他类型的服务包括平台即服务(PaaS)和软件即服务(SaaS)。PaaS提供了用户可以访问的完整或部分的应用程序开发,SaaS则提供了完整的可直接使用的应用程序,比如通过Internet管理企业资源。

      相信以后的软件使用是美好的。

      一台16核32G内存的虚拟机上,需要跑500+个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要:

      资源隔离:比如限制应用最大内存使用量,或者资源加载隔离等。

      低消耗:虚拟化本身带来的损耗需要尽量的低。

      我们不可能在一台机器上开500个虚拟机,虽然可以在资源隔离方面做的很好,但这种虚拟化本身带来的资源消耗太严重。另一个方面,我们可以考虑使用语言级别沙箱,虽然这种「虚拟化」本身的消耗可以低到忽略不计,但是资源隔离方面绝对是噩梦,比如你打算在一个JVM里隔离内存的使用。而Docker很好的权衡了两者,即拥有不错的资源隔离能力,又有很低的虚拟化开销。

    4 相关知识—虚拟化技术

      虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

      虚拟化技术实现相关软件:

      KVM、Xen、Hyper-V、VMware EXSI 、Docker、OpenStack等。

      对于KVM、OpenStack、Docker,可以这么说,其中OpenStack扮演整体数据中心管理方案的角色,KVM作为多租户计算资源管理工具,而Docker容器则负责与应用部署包相关的工作。

    5 参考资料

    https://www.docker.com/enterprise 
    http://www.infoq.com/cn/articles/docker-core-technology-preview 
    http://baike.baidu.com/view/1413359.htm 
    http://baike.baidu.com/view/2088218.htm 
    http://baike.baidu.com/view/369107.htm 
    http://baike.baidu.com/view/2482595.htm 
    https://www.zhihu.com/question/22969309 
    http://dockone.io/article/723 
    http://www.wenwenyun.com/a/tip/2014/0924/533.html 
    http://www.wenwenyun.com/a/tip/2014/0926/552.html

    http://blog.csdn.net/freeape/article/details/51137672

  • 相关阅读:
    MyEclipse的配置--博客园老牛大讲堂
    Hbuilder连接夜神模拟器---博客园老牛大讲堂
    APICloud连接夜神模拟器--博客园老牛大讲堂
    H5混合开发APP配置以及第一个工程--博客园老牛大讲堂
    实现标签页(菜单栏)--博客园老牛大讲堂
    H5动态添加数据-博客园老牛大讲堂
    bootstrap实现网页手风琴--博客园老牛大讲堂
    返回零长度的数组或集合,而不是null
    用EnumMap代替序数索引
    用EnumSet代替位域
  • 原文地址:https://www.cnblogs.com/findumars/p/6294116.html
Copyright © 2011-2022 走看看