下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Docker是什么?它的核心价值在哪里?

作者:课课家教育     来源: http://www.kokojia.com点击数:1571发布时间: 2018-01-07 10:00:46

标签: 服务器Docker安全

  如果你是数据中心或者云计算IT圈子的人,那么Docker这种容器技术应该不陌生。有了它,人们就有可能让数量多的多的应用程序在同样的旧服务器上运行;有了它,人们也很容易封装和交付程序。那我们就来了解Docker吧。

Docker是什么?它的核心价值在哪里?_服务器_Docker_安全_课课家教育
  Docker是什么?
  简答的来说,Docker是一个由GO语言写的程序运行的“容器”(linux containers ,LXCs);目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
  Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:
  Docker Engine: 一个便携式、轻量级的运行环境和包管理器。(注* 单OS vs 单线程,是不是跟NodeJS特别像?)
  Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)
  从2013年3月20日,第一个版本的Docker正式发布到 2014年6月 Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。
  Docker通常用于如下场景:
  web应用的自动化打包和发布;
  自动化测试和持续集成、发布;
  在服务型环境中部署和调整数据库或其他的后台应用;
  从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
  Docker的真正核心在哪?
  Docker的真正核心在于:
  它抛弃传统VM试图模拟完整机器的思路,而是以应用为单元进行"集装封箱"
  这样做的好处主要有两个:
  加快启动速度:我们知道,为了兼容性,通用性的考虑,虚拟化厂商无法对OS进行优化。传统VM启动之所以慢,很大程度是因为OS启动耗时。反观Docker,由于只考虑应用本身,当Docker镜像启动时就可以做到心无杂念,自然也就快。
  精简镜像:从技术角度来说,AUFS也可以应用在VM的镜像(qcow2)。但由于VM面向的是完整的OS,其中包含了各种服务,导致VM镜像一般体积较大(GB),不方便交付和部署。而Docker不关心完整的OS,只包含应用运行所需的最小集合,因此镜像体积只有200-300MB,大大缩短了镜像的下载时间。
  说到这里,你可以看到"面向应用"是Docker最核心的理念。
  Docker优缺点
  好的部分:
  Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性;
  
  运行时的性能可以获取极大提升(经典的案例是提升97%)
  管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
  敏捷
  像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
  灵活
  将应用和系统“容器化”,不添加额外的操作系统,
  轻量
  你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
  便宜
  开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
  生态系统
  正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC.
  还有不计其数的社区和第三方应用。
  云支持
  不计其数的云服务提供创建和管理Linux容器框架。
  有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升。
  有争论的部分:
  任何项目都会有争论,就像Go,像NodeJS, 同样Docker也有一些。
  能否彻底隔离
  在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。 注* 就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。
  不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。
  GO语言还没有完全成熟
  Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。
  被私有公司控制
  Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)。
  Docker容器的迁移步骤
  步骤1:分解
  一般来说,应用程序都是复杂的,它们都有很多的组件。例如,大多数应用程序都需要数据库或中间件服务的支持以实现对数据的存储、检索和集成。所以,需要通过设计和部署把这些服务拆分成为它们自己的容器。如果一个应用程序能够被拆分成为越多的分布式组件,那么应用程序扩展的选择则越多。但是,分布式组件越多也意味着管理的复杂性越高。
  步骤2:选择一个基础映像
  当执行应用程序迁移时,应尽量避免推倒重来的做法。搜索Docker注册库找到一个基本的Docker映像并将其作为应用程序的基础来使用。
  随着时间的推移,企业将会发现这些Docker注册库中基本映像的价值所在。
  步骤3:解决安全性和管理问题
  安全性和管理应当是一个高优先级的考虑因素;企业用户不应再把它们当作应用程序迁移至容器的最后一步。反之,企业必须从一开始就做好安全性和管理的规划,把它们的功能纳入应用程序的开发过程中,并在应用程序运行过程中积极主动地关注这些方面。这就是企业应当花大功夫的地方。
  步骤4:增加代码
  为了创建映像,企业用户需要使用一个Dockerfile来定义映像开发的必要步骤。一旦创建了映像,企业用户就应将其添加至Docer Hub。
  步骤5:配置、测试、部署
  应对在容器中运行的应用程序进行配置,以便于让应用程序知道可以在哪里连接外部资源或者应用程序集群中的其他容器。企业用户可以把这些配置部署在容器中或使用环境变量。
  最后,把容器部署到实际生产环境中。为了积极主动地关注基于容器的应用程序的运行状况,可考虑实施必要的监控和管理机制 。确保打开日志记录功能。
  简而言之,Docker能为你做的事情就是:相比其他技术,它能让更多数量的应用程序在同一硬件上运行;它让开发人员易于快速构建可随时运行的容器化应用程序;它大大简化了管理和部署应用程序的任务。
  阅读更多内容,欢迎登陆课课家教育,感谢大家对课课家的大力支持!

赞(15)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程