Docker的简单介绍与理解

38次阅读

共计 2833 个字符,预计需要花费 8 分钟才能阅读完成。

Docker 的介绍与理解

一、什么是 Docker?

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,它将软件组件包装成一个完整的标准化单元,其中包含所有要运行的内容。无论是代码,运行时环境,工具还是程序库。它保证软件能始终按预期那样运行。。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app), 更重要的是容器性能开销极低。可以在给定的主机上同时运行多个容器。它是轻量级的,可立即启动并使用较少的内存。它是默认安全的,因为每个容器彼此隔离。注意 - Docker 容器并不是针对某种特定的平台。它可以在任何计算机,任何基础架构和云中运行。

二、Docker 的优点

    快
    运行时的性能可以获取极大提升(经典的案例是提升 97%)管理操作(启动,停止,开始,重启等等)都是以秒或毫秒为单位的。敏捷
    像虚拟机一样敏捷,而且会更便宜,在 bare metal(裸机)上布署像点个按钮一样简单。灵活
    将应用和系统“容器化”,不添加额外的操作系统,轻量
    你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署 100~1000 个 Containers 容器。便宜
    开源的,免费的,低成本的。由现代 Linux 内核支持并驱动。注 * 轻量的 Container 必定可以在一个物理机上开启更多“容器”,注定比 VMs 要便宜。生态系统
    正在越来越受欢迎,只需要看一看 Google 的趋势就知道了,docker or LXC. 还有不计其数的社区和第三方应用。云支持
    不计其数的云服务提供创建和管理 Linux 容器框架。

三、Docker 的缺点

    1.Docker 支持 Unix/Linux 操作系统,不支持 Windows 或 Mac(即使可以在其上安装,不过也是基于 Linux 虚拟机的)2.Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker 容器外。3. 灵活性,安全性,配置共享方面有所欠缺

四、有争议的部分、

    任何项目都会有争论,就像 Go,像 NodeJS, 同样 Docker 也有一些。能否彻底隔离
    在超复杂的业务系统中,单 OS 到底能不能实现彻底隔离,一个程序的崩溃 / 内存溢出 / 高 CPU 占用到底会不会影响到其他容器或者整个系统?很多人对 Docker 能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。注 * 就像有人质疑 Node.JS 单线程快而不稳,无法在复杂场景中应用一样。不过可喜的是,目前 Linux 内核已经针对 Container 做了很多改进,以支持更好的隔离。GO 语言还没有完全成熟
    Docker 由 Go 语言开发,但 GO 语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半 git、半包管理的方式让一些人产生不适。被私有公司控制
    Docker 是一家叫 Dotcloud 的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎 Docker 项目,只能使用黑匣子编出的 Docker 二进制发行包,未来可能不是完全免费的。目前 Docker 已经推出面向公司的企业级服务(咨询、支持和培训)

五、Docker 的应用场景

    1. 简化配置
    这是 Docker 公司宣传的 Docker 的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker 在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个 Docker 的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。2. 代码流水线(Code Pipeline)管理
    前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。3. 提高开发效率
    这就带来了一些额外的好处:Docker 能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考 Aater 在 DevOpsDays Austin 2014 大会或者是 DockerCon 上的演讲。不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是 Docker 做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在 Docker 可以轻易的让几十个服务在 Docker 中跑起来。4. 隔离应用
    有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考 Steve Yege 的这篇论文,文中将 Google 和亚马逊做了比较。5. 整合服务器
    正如通过虚拟机来整合多个应用,Docker 隔离应用的能力使得 Docker 可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker 可以比虚拟机提供更好的服务器整合解决方案。6. 调试能力 Docker
    提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试 Bug。你可以在《Docker 拯救世界》的文章中找到这一点的例证。7. 多租户环境
    另外一个 Docker 有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为 IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。使用 Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于 Docker 环境的启动速度和其高效的 diff 命令。你可以在这里了解关于此场景的更多信息。8. 快速部署
    在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker 的虚拟化技术将这个时间降到了几分钟,Docker 只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。这正是 Google 和 Facebook 都看重的特性。你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有 30%,通过使用 Docker 并进行有效的资源分配可以提高资源的利用率。

正文完
 0