阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Docker学习总结之Docker与Vagrant之间的特点比较

175次阅读
没有评论

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

以下内容均出自 Vagrant 作者 (Mitchell Hashimoto) 与 Docker 作者 (Solomon Hykes) 在 stackoverflow 上面一个问题讨论。在这个问题中,双方阐述了 vagrant 和 docker 的特点和使用范围,对于深入理解 vagrant 和 docker 很有意义,因此笔者翻译出来,以供大家讨论学习。

Mitchell 作为 vagrant 的作者,其在 DevOps 的世界里面沉浸多年,接触了很多类似 docker 的虚拟化软件。他目前接触了很多使用 vagrant 和 docker 的场景,所以看到了两者是如何相互搭配发生作用的。

他认为如果单单是开发人员一个人单独使用主机,使用 docker 可以简化很多事情,这种场景下使用 docker 和 vagrant 都没有什么区别。所以他更多的讨论了一些复杂场景,在这些复杂场景中,docker 和 vagrant 就有一些区别了。

以下是他原文:

不分场景而直接比对 vagrant 和 docker 是不恰当的!在一些简单场景中,它们两款产品作用是重复的,但在更多场景中,它们两款产品无法相互替 代。事实上,vagrant 抽象度比 docker 更高,因此直接用 vagrant 同 docker 相比较是不恰当的。而把 vagrant 同 Boot2Docker(一款运行 docker 最小的内核) 进行比较似乎更加恰当。

vagrant 为了支持开发,在启动虚拟机环境时启动了很多的应用和服务。vagrant 可以在 VirtualBox, VMware 上面运行(docker 无法执行)。vagrant 也可以在 AWS, OpenStack 这些云环境中运行。即便你使用了 docker 的容器,vagrant 同样也没问题。vagrant 可以自动 install, pull down, build,  run Docker containers。

比如在 vagrant V1.6 版本中,vagrant 集成了 docker-based development environments, 因此 Vagrant 可以在 windows,mac 和 linux 上面提供 docker 服务。

vagrant 没有想替代 docker 的想法,相反它还包含了 docker 的一些特性。

如果我们从逻辑层面来比较 vagrant 和 docker 的话,那么:

1、docker 只能执行 docker 所定义的容器。

2、docker 缺乏灵活的隔离方案(docker 只能运行在 Linux 主机环境中)。

如果我们从 Production 和 CI 层面来比较,那么 docker 就无法与 vagrant 相比了:Vagrant 没有上面的约束条件,而 docker 必须依赖它们。

如果你的项目必须使用 Docker 的容器,同时只能部署在 Linux 主机中。这个时候 Docker 的确是一个不错的选择。除此之外,我就看不到使用 docker 的优势了,相反你还浪费了 vagrant 很多的优点:

    • vagrant 可以支持多种虚拟环境,例如 VirtualBox, VMware, AWS, OpenStack 等等。无论你使用何种虚拟环境,vagrant 都可以顺利执行起来。如果你使用了 Docker,也可以在 vagrant 中顺利安装 docker。
    • vagrant 可以降低项目复杂度。或者换个说法:你只需要考虑如何执行你的项目就可以,而不论这个项目是用的 docker 还是什么别的。在未来,如果出现了 docker 的竞争者,那么 vagrant 也可以顺利执行它。
    • vagrant 可以运行在多个主机环境中,windows(XP 以上),MAC(10.5 以上),Linux(2.6 内核版本以上)。如果你使用了 docker,那么 vagrant 也可以在上面三种操作系统之上运行你的 docker。
    • vagrant 可以更好的配置网络和文件共享。比如:vagrant 可以给一个 VM 配置静态 IP 和端口数据转发。不论你使用的 VirtualBox 还是 VMware,vagrant 都可以很好的完成配置。对于文件共享来说,vagrant 提供了多种文件挂载方案供你考虑。如果你使用了 docker,那么 这些事情就都需要你亲自动手来做了。
    • vagrant 1.6 中集成了 docker-based development environments。所以在 MAC 和 Windows 环境中,vagrant 会自动启动一个虚拟机来执行 docker,这样就达到了 docker 的跨平台化。而背后例如网络,文件等等操作都是 vagrant 默默完成的。

下面两点是我听到 docker 可以替代 vagrant 的声音:

    • “Docker 需要移动的数据很少 ” 的确,Docker 有这个特点(应该指的是 Docker 采用的 UFS,导致 docker 每次变动所需的数据很少 – 笔者猜测)。但是 当你在每个项目都使用 docker,或者在每个项目的现在,将来都使用 docker 时,你就会发现 docker 所产生的数据并不少。而如果你使用 vagrant,那么只需要移动一次就可以完成。(原文:”It is less moving parts” – Yes, it can be, if you use Docker exclusively for every project. Even then, it is sacrificing flexibility for Docker lock-in. If you ever decide to not use Docker for any project, past, present, or future, then you’ll have more moving parts. If you had used Vagrant, you have that one moving part that supports the rest).
    • “Docker 启动非常快 ”,当使用 docker 启动容器时,它比其他虚拟机启动的都快。但是我要说的是,目前从产品化角度分析所有 vagrant 主机基本都是启动一次,然后不再停机。如果从快速部署开发环境来说,docker 这个特性真的是非常好。

  所以,我们现在可以得知 vagrant 和 docker 是有很大区别的,直接比较这两个是不正确的。对于开发环境来说,vagrant 是一种更为抽象,更为通用的解决方案。Docker 所能提供的场景只是 vagrant 所支持的特殊场景之一。

在一些极端案例场景下,docker 完全可以替代 vagrant。但在更多的场景下,这是错误的。同时 vagrant 也不会封锁你使用 docker。

针对 Mitchell 的这些解释,Hykes 写出了下述的论点:

如果你仅仅是想管理虚拟机,那么你应该使用 vagrant。如果你想快速开发和部署应用,那么应该使用 docker。

vagrant 是一款管理虚拟机的工具,而 docker 是一款通过将应用打包到轻量级容器,而实现构建和部署的工具。两者适用范围不同。一个容器就是一个包含了应用执行所依赖的数据(包括 lib,配置文件等等)。它可以保证应用在一个可重复的环境中随时执行。

有了这个容器,就可以很简单的构建你的容器也可以随时随地的进行部署。

Docker 只能在 Linux 上面执行是一个很大的误区!事实上,Docker 可以在 MAC 和 Windows 上面安装。如果你在 MAC 上面安装 Docker,那么会有一个大概 25MB 的精简 Linux VM 来充当 MAC 和 docker 直接的交流者。一旦 Docker 安装完成后,就可以使用同样的命令进行操作了。这样,世界一下就美好了:你通过轻量级的容 器可以更好的测试和开发你的应用,并且很容易的将这些应用进行分发(比如通过 https://index.docker.io)。而你不需要了解如何管理这些虚拟机,而仅仅把虚拟机当做完成事情中的一个环节而已。

理论上,vagrant 可以作为 docker 一个抽象数据层。理由如下:

    • 首 先,vagrant 不是对 docker 更好的抽象。vagrant 设计使用来管理虚拟机的,而 docker 设计是用来管理应用的。这就意味着 docker 在设计之初就是为了可以通过多种方式来相互组合应用。在 docker 中 processes, log streams, environment variables ,network links between components 是最底层的原型。在 vagrant 中 machines, block devices, and ssh keys 是最底层的原型。vagrant 工作在系统底层,它同另外一个 vagrant 容器交互的方式只有把它当做一个可以 ”boot” 和 ”log into” 的机器。因此,你可以在 docker 上面安装插件后,执行 ”vagrant up” 命令后等待美好的事情发生。
    • 其 次,可锁定的环境参数 (the lock-in argument)。””If you use Vagrant as an abstraction, you will not be locked into Docker!” 站在管理虚拟机的 vagrant 角度上面看,这句说没有错:Docker 不是另外一个独立的容器。像 EC2 和 VMware 一样,我们要避 免创造一个和其它工具相捆绑的东西。Docker 对宿主机没有任何要求,它允许你通过轻量级的容器在任意地方进行部署。在你部署应用时,不需要考虑应该部 署到什么环境中。比如说:你可以在其他人提供的主机(很可能上面已经部署了 EC2 或者 vagrant) 上面部署应用。

所以最后可以说:Vagrant 适合用来管理虚拟机,而 docker 适合用来管理应用环境。

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm 

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm 

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Docker 和一个正常的虚拟机有何区别? http://www.linuxidc.com/Linux/2013-12/93740.htm 

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm 

Docker 将改变所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm 

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计4381字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中