我应该使用Vagrant还是Docker创建隔离的环境?[关闭]


2083

我使用Ubuntu进行开发和部署,并且需要创建一个隔离的环境。

我正在考虑为此目的使用Vagrant或Docker。优缺点是什么,或者这些解决方案相比如何?


27
两者现在都可以组合:docs.vagrantup.com/v2/provisioning/docker.html
Alp

78
您的问题很幸运,可以得到两位服务的两位作者的答案:Mitchell和Solomon Hykes
itsazzad 2015年

4
我想给出一个新的摘要-问题主要是错误的。正确的问题是:我应该使用Vagrant还是docker-compose创建隔离的环境?答案是,Vagrant和docker-compose执行的环境描述任务相同,而您应该将Docker与Virtualbox进行比较。区别在于,Vagrant可以使用任何虚拟化,例如Docker,VMWare,Windows,Linux或OSX上的Virtualbox,但是docker-compose只能使用基于Linux的Docker映像。
PHZ.fi-Pharazon

对我来说,答案是“在日常工作中,速度对您有多重要”。我发现Vagrant比Docker慢。在docker上,尤其是在最初拉动之后,docker的缓存和分层方法使它成为我作为开发人员使用起来最简单,最快的方式
Michael Durrant

Answers:


1155

如果您的目的是隔离,那么我认为Docker是您想要的。

Vagrant是虚拟机经理。它允许您编写虚拟机配置和配置脚本。但是,它仍然是虚拟机,取决于VirtualBox(或其他),具有巨大的开销。它要求您拥有一个巨大的硬盘文件,需要大量内存,并且性能可能不是很好。

另一方面,Docker通过LXC使用内核cgroup和命名空间。这意味着您使用与主机相同的内核和相同的文件系统。您可以将Dockerfile与docker build命令配合使用,以处理容器的配置和配置。您在docs.docker.com上有一个有关如何制作Dockerfile的示例;这是非常直观的。

您可能要使用Vagrant的唯一原因是,如果需要在Ubuntu机器上进行BSD,Windows或其他非Linux开发。否则,选择Docker。


13
不幸的是,还没有。如果您使用的是32位系统,则需要具有64位来宾系统的VM才能运行docker。但是,使用go1.1时,对32位的支持会变得更好,而docker可能很快会支持32位的arch
creack发生

8
Mac和Windows都是如此,但是从docker 0.7开始,任何Linux发行版都可以正常工作。如果您知道不正常的情况,请告诉我。另外,除非您具有Mac或Windows堆栈(这不太可能,但可能会发生),否则您不想在Linux之外的任何地方运行Docker。docker客户端在Mac上运行良好,应该很快在BSD上运行,并且守护程序最终将支持BSD,Solaris和Mac。
creack

9
万一有人读了这些评论,您应该知道Docker在12天前就发布了ver1.0blog.docker.com/2014/06/its-here-docker-1-0),并且很多不同的平台都是稳定的&现在(支持docs.docker.com/installation
JorgeArtware

17
vagrant有LXC和docker Provisioners。但是-Vagrant和docker是根本不同的东西。Vagrant仅用于开发环境,而docker仅用于生产和Linux。
Dannyboy 2014年

2
Docker现在可以在Windows 10 Pro及更高版本以及Windows Server 2016上运行。我刚刚从Windows 10 Home升级到Windows 10 Pro,并安装了docker应用。现在,我可以在Windows 10上运行Linux docker映像了。太棒了!
PrestonDocks

2339

免责声明:我写了Vagrant!但是因为我写了Vagrant,所以我将大部分时间都花在DevOps世界中,其中包括Docker之类的软件。我与许多使用Vagrant的公司合作,许多使用Docker,并且我看到两者之间如何相互作用。

在我讲得太多之前,有一个直接的答案:在您的特定情况下(您自己工作,在Linux上工作,在生产中使用Docker),您可以单独使用Docker并简化事情。在许多其他情况下(我将进一步讨论),这并不是那么容易。

直接比较Vagrant和Docker是不正确的。在某些情况下,它们确实重叠,而在绝大多数情况下却不重叠。实际上,比较合适的比较是Vagrant与类似Boot2Docker(可以运行Docker的最小操作系统)之类的东西。在抽象性方面,Vagrant比Docker高一个级别,因此在大多数情况下,它不是一个公平的比较。

Vagrant出于开发目的启动运行应用程序/服务的事物。这可以在VMware的VirtualBox上。它可以像AWS,OpenStack一样是远程的。在这些容器中,如果您使用容器,则Vagrant不在乎,并接受它:例如,它可以自动安装,下拉,构建和运行Docker容器。在Vagrant 1.6中,Vagrant具有基于docker的开发环境,并支持在Linux,Mac和Windows上以与Vagrant相同的工作流程使用Docker。Vagrant在这里没有尝试替换Docker,而是采用了Docker实践。

Docker专门运行Docker容器。如果您直接将其与Vagrant进行比较:它是一种更具体的(只能运行Docker容器),灵活性较差(需要Linux或Linux主机的地方)的解决方案。当然,如果您要谈论生产或CI,那么这与Vagrant无可比拟!Vagrant不在这些环境中,因此应使用Docker。

如果您的组织在所有项目中仅运行Docker容器,并且只有开发人员在Linux上运行,那么Doc​​ker一定可以为您工作!

否则,我不会尝试单独使用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的计算机(VM或远程)。

  • Vagrant知道如何配置一些高级或不重要的内容,例如网络和同步文件夹。例如:Vagrant知道如何将静态IP附加到计算机或转发端口,并且无论使用什么系统(VirtualBox,VMware等),配置都是相同的。对于同步文件夹,Vagrant提供了多种机制来获取本地文件夹。文件转移到远程计算机(VirtualBox共享文件夹,NFS,rsync,Samba [插件]等)。如果您使用的是Docker,甚至是带有不带Vagrant的VM的Docker,则在这种情况下,您将必须手动执行此操作,否则他们将不得不重新发明Vagrant。

  • Vagrant 1.6对基于docker的开发环境提供了一流的支持。这不会在Linux上启动虚拟机,而会在Mac和Windows上自动启动虚拟机。最终结果是,在所有平台上使用Docker的工作都是统一的,而Vagrant仍处理诸如网络,同步文件夹等繁琐的细节。

为了解决我听到的赞成使用Docker而不是Vagrant的特定反论点:

  • “减少了活动部分”-是的,如果您对每个项目都专门使用Docker,那就可以了。即使这样,它仍然牺牲了Docker锁定的灵活性。如果您决定不将Docker用于过去,现在或将来的任何项目,那么您将拥有更多动人的部分。如果您使用过Vagrant,那么您有一个运动部件可以支撑其余部分。

  • “更快!” -一旦有了可以运行Linux容器的主机,Docker在运行容器方面肯定比启动任何虚拟机都要快。但是启动虚拟机(或远程机器)是一次性的费用。在一天的过程中,大多数Vagrant用户从未真正销毁过他们的VM。对于开发环境而言,这是一个奇怪的优化。在生产中,Docker真正发挥了作用,我知道需要快速启动/关闭容器。

我希望现在可以清楚地看到,将Docker与Vagrant进行比较非常困难,而且我认为这是不正确的。对于开发环境,Vagrant更抽象,更通用。Docker(以及使它表现得像Vagrant的各种方式)是Vagrant的一个特定用例,而忽略了Vagrant提供的其他一切。

结论:在高度特定的用例中,Docker当然可以替代Vagrant。在大多数情况下,情况并非如此。Vagrant不会妨碍您使用Docker;它实际上会尽力使体验更加流畅。如果您发现这不是真的,我很乐意提出改进建议,因为Vagrant的目标是在任何系统上均能正常工作。

希望这可以清除一切!


4
@JaredMarkell我想也许他正在寻找一种基于Web的服务,该服务可以让他管理自己的Vagrant机器,例如Protobox
Ryan Kennedy

73
@Mitchell我只想说谢谢您这么详细地解释了这一点。显然,您不可能完全客观,因此,我感谢您花时间解释细微差别和可以使用它们的各种情况。我认为当今围绕各种工具的很多困惑是它们重叠很多,而且很多人都想要一种“一刀切”的解决方案,其中有人告诉他们怎么做并且可以实现它。您的回答的妙处在于,它回答了一个基本问题:如何创建一个孤立的环境?(与工具无关)。
乔丹

4

3
@OğuzÇelikdemirVagrant可以做的不止如此。当然,如果为每个项目准备一个特定的虚拟机,则将持续进行。但是在开发过程中,我常常最终会添加更多的服务/守护程序/设置(例如,当我决定在开发过程中为项目使用RabbitMQ时)。纯粹的VM方法要求您准备一个新映像,并安装并配置RabbitMQ,并迫使开发人员将其VM更改为此新映像。对于Vagrant-我在vagrant配置中添加了适当的代码行,所有开发人员都可以轻松地升级他们的VM(使用vagrant provision)。
TomaszStruczyński15年

5
(您的意思是“披露”,表示重要而不是“免责声明”,否认责任:english.stackexchange.com/q/115850
Jerry101,2016年

1418

我是Docker的作者。

简短的答案是,如果要管理计算机,则应使用Vagrant。而且,如果要构建和运行应用程序环境,则应使用Docker。

Vagrant是用于管理虚拟机的工具。Docker是一种通过将应用程序打包到轻量级容器中来构建和部署应用程序的工具。容器可以容纳几乎任何软件组件及其依赖项(可执行文件,库,配置文件等),并在有保证且可重复的运行时环境中执行。这使得一次构建应用程序并将其部署到任何地方都非常容易-在笔记本电脑上进行测试,然后在其他服务器上进行实时部署,等等。

一个常见的误解是,您只能在Linux上使用Docker。那是不对的。您还可以在Mac和Windows上安装Docker。当安装在Mac上时,Docker会捆绑一个微型Linux VM(磁盘上有25 MB!),它充当容器的包装器。一旦安装,它是完全透明的;您可以以完全相同的方式使用Docker命令行。这为您提供了两全其美的优势:您可以使用容器进行测试和开发应用程序,这些容器非常轻巧,易于测试并且易于移动(例如,参阅https://hub.docker.com,以与以下人员共享可重复使用的容器: Docker社区),您无需担心管理虚拟机的细节,无论如何,这只是一种终结手段。

从理论上讲,可以将Vagrant用作Docker的抽象层。我建议这样做有两个原因:

  • 首先,Vagrant对于Docker来说不是一个很好的抽象。Vagrant旨在管理虚拟机。Docker旨在管理应用程序运行时。这意味着,根据设计,Docker可以以更丰富的方式与应用程序进行交互,并且具有有关应用程序运行时的更多信息。Docker中的原语是进程,日志流,环境变量以及组件之间的网络链接。Vagrant中的原语是机器,块设备和ssh密钥。Vagrant只是在堆栈中位于较低的位置,它与容器交互的唯一方法是假装它只是另一种机器,您可以“启动”和“登录”。因此,可以肯定的是,您可以使用Docker插件键入“ vagrant up”,这将会发生一些事情。它可以替代Docker可以完成的全部工作吗?尝试使用本机Docker几天,然后亲自看看:)

  • 第二,锁定参数。“如果将Vagrant用作抽象,您将不会被Docker锁定!”。从设计用于管理机器的Vagrant的角度来看,这是很有意义的:容器不只是另一种机器吗?就像Amazon EC2和VMware一样,我们必须小心不要将我们的配置工具绑定到任何特定的供应商!这将创建锁定-最好使用Vagrant将其抽象化。除此之外,这完全忽略了Docker的要点。Docker不配置机器;它将您的应用程序包装在轻巧的可移植运行时中,该运行时可放在任何地方。

您为应用程序选择的运行时与配置机器的方式无关!例如,经常将应用程序部署到由其他人预配的机器上(例如,由系统管理员部署的EC2实例,也许使用Vagrant),或者将其部署到Vagrant根本无法预配的裸机上。相反,您可以使用Vagrant来配置与开发应用程序无关的机器-例如,即用型Windows IIS盒之类的东西。或者,您可以使用Vagrant为不使用Docker的项目配置机器-例如,它们可以结合使用rubygems和rvm进行依赖项管理和沙箱管理。

总结:Vagrant用于管理机器,而Docker用于构建和运行应用程序环境。


396
只是想指出此答案的“无家可归”方面是不正确的。Vagrant不是用于管理机器,Vagrant是用于管理开发环境。流浪汉旋转机器的事实主要是历史性的。下一个版本的Vagrant具有一流的支持,可以直接在主机或任何VM(Mac,Win)上使用Docker作为提供程序来加速开发环境。如果那是某人想要的(同样,在主机或VM上),它也可以启动原始LXC。Vagrant感兴趣的是尽最大努力创建可移植的开发环境,无论这是否意味着要创建VM。
米切尔2014年

7
@Davide这将详细介绍:vagrantup.com/blog/…–
Mitchell

48
“这是一个普遍的误解,认为您只能在Linux上使用Docker。”没错,准确地说,您只能在Docker上使用Linux。如果我想设置一个可以在各种环境配置(不同的数据库,php版本,缓存后端等)中运行我的应用程序的测试运行程序,那么我可以使用docker容器轻松地做到这一点。但是我看不到我的应用程序是否可以在Windows IIS env或BSD或OSX上正常运行。
Mixologic 2014年

10
:您的第一个点是过时的,因为流浪内置了供应商支持搬运工docs.vagrantup.com/v2/provisioning/docker.html
阿尔普

19
该帖子已过时。Vagrant现在支持Docker作为提供者。并且在他们的博客上有一些视频演示了如何一起使用Vagrant和Docker 。
sargas 2014年

86

作为我的回答的开头,我承认我没有使用Docker的经验,只是作为一个狂热的观察者,这看起来像是一种非常整洁的解决方案,并且吸引了很多人。

我对Vagrant确实有相当丰富的经验,可以强烈推荐它。就基于VM而不是基于LXC而言,这无疑是一个更重量级的解决方案。但是,我发现一个不错的笔记本电脑(8 GB RAM,i5 / i7 CPU)在使用Vagrant / VirtualBox和开发工具一起运行VM时没有问题。

Vagrant真正很棒的事情之一是与Puppet / Chef / shell脚本的集成,用于自动配置。如果使用这些选项之一来配置生产环境,则可以创建一个开发环境,该开发环境与您将要获得的开发环境几乎相同,而这正是您想要的。

Vagrant的另一个优点是您可以将Vagrantfile和应用程序代码一起版本化。这意味着团队中的其他所有人都可以共享此文件,并且可以确保每个人都使用相同的环境配置。

有趣的是,Vagrant和Docker实际上可能是互补的。Vagrant可以扩展为支持不同的虚拟化提供程序,而Docker可能是这样的提供程序之一,并在不久的将来获得支持。请参阅https://github.com/dotcloud/docker/issues/404,以获取有关该主题的最新讨论。


7
伙计们,我发布了 针对docker实验性流浪汉提供程序:github.com/fgrehm/docker-provider
fgrehm

2
Docker不是虚拟化,而是使用相同的主机内核在自己的容器中运行操作系统,而不是像其他VM一样的提供程序,因此Vagrant已支持docker。
Aftab Naveed 2014年

1
Docker是OS本身的虚拟化,隐式地重用了底层硬件。它是虚拟化,因为它抽象化并隔离了容器中运行的文件系统,网络和进程。
jose.angel.jimenez '16

63

它们是非常互补的。

我将VirtualBox,Vagrant和Docker的组合用于我的所有项目已有几个月,并且强烈感受到了以下好处。

在Vagrant中,您可以完全取消任何Chef单人配置,而您需要做的vagrant文​​件仅是准备一台运行单个安装docker的小型shell脚本的计算机。这意味着我对每个项目的Vagrantfiles几乎相同且非常简单。

这是一个典型的Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "mark2"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  [3000, 5000, 2345, 15672, 5672, 15674, 27017, 28017, 9200, 9300, 11211, 55674, 61614, 55672, 5671, 61613].each do |p|
    config.vm.network :forwarded_port, guest: p, host: p
  end
  config.vm.network :private_network, ip: "192.168.56.20"
  config.vm.synced_folder ".", "/vagrant", :type => "nfs"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
  end
  # Bootstrap to Docker
  config.vm.provision :shell, path: "script/vagrant/bootstrap", :privileged => true
  # Build docker containers
  config.vm.provision :shell, path: "script/vagrant/docker_build", :privileged => true
  # Start containers
  # config.vm.provision :shell, path: "script/vagrant/docker_start", :privileged => true
end

安装docker的Bootstrap文件如下所示

#!/usr/bin/env bash
echo 'vagrant  ALL= (ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
apt-get update -y
apt-get install htop -y
apt-get install linux-image-extra-`uname -r` -y
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install lxc-docker -y
apt-get install curl -y

现在要获得我需要运行的所有服务,我有一个docker_start脚本,看起来像这样

#!/bin/bash
cd /vagrant
echo Starting required service containers
export HOST_NAME=192.168.56.20
# Start MongoDB
docker run --name=mongodb --detach=true --publish=27017:27017 --publish=28017:28017 dockerfile/mongodb
read -t5 -n1 -r -p "Waiting for mongodb to start..." key
# Start rabbitmq
docker run --name=rabbitmq --detach=true --publish=5671:5671 --publish=5672:5672 --publish=55672:55672 --publish=15672:15672 --publish=15674:15674 --publish=61613:61613 --env RABBITMQ_USER=guest --env RABBITMQ_PASS=guest rabbitmq
read -t5 -n1 -r -p "Waiting for rabbitmq to start..." key
# Start cache
docker run --name=memcached --detach=true --publish=11211:11211  ehazlett/memcached
read -t5 -n1 -r -p "Waiting for cache to start..." key
# Start elasticsearch
docker run --name=elasticsearch --detach=true --publish=9200:9200 --publish=9300:9300 dockerfile/elasticsearch
read -t5 -n1 -r -p "Waiting for elasticsearch to start..." key
echo "All services started"

在此示例中,我正在运行MongoDB,Elastisearch,RabbitMQ和Memcached

非Docker Chef的单独配置将更加复杂。

当您进入生产环境时,将开发环境转换为主机的基础架构,这是最终的一大优势,这些主机的架构完全相同,因为它们只有足够的配置来运行docker,这实际上意味着很少的工作。

如果您有兴趣,可以在我自己的网站上找到有关开发环境的更详细的文章,网址为:

实施Vagrant / Docker开发环境


2
您完成了所有的docker_start编排,但没有麻烦将容器链接在一起。您是否只是因为要在Vagrant下运行而使用硬编码的端口号?
WineSoaked,2014年

6
嗨,WineSoaked,上面的示例未显示实际使用所有那些服务的容器。如果您在提到的博客文章中查找,则还有另一个脚本script / vagrant / docker_web可以启动项目的开发容器。实际上,这确实在docker run命令上使用了--link,并且Rails项目使用docker注入的环境变量来连接服务。
Mark Stratmann

1
我可以看到合并这两种产品的潜力。流浪者作为环境测试和docker的应用程序包装。合并两者,您可以在多个方案中测试单个应用程序或单元测试。我认为许多“测试平台服务”当时都在使用Vagrant + Docker。
m3nda 2015年

8
“他们非常免费。” —实际上,两者都是免费使用的。
Underyx '16

2
嗨,@koppor,我上个月使用docker机器是大约三个月前,还没有回到它。我遇到的问题是使用VMWare驱动程序时,从我的MAC主机主机到运行docker的VM共享文件夹存在一个错误。这意味着我无法在Mac上本地编辑代码,而更改会反映在docker容器中。我不知道他们是否已修复它,我什么时候确实会切换到它。但是,自编写此答案以来,我将所有容器编排都切换为docker compose
Mark Stratmann


46

现在,借助Vagrant,您可以将Docker作为提供程序。http://docs.vagrantup.com/v2/docker/。可以使用Docker提供程序代替VirtualBox或VMware。

请注意,您还可以将Docker与Vagrant一​​起使用。这与使用Docker作为提供程序非常不同。http://docs.vagrantup.com/v2/provisioning/docker.html

这意味着您可以用Docker 替换ChefPuppet。您可以使用诸如Docker作为提供者(VM)和Chef作为预配者的组合。或者,您可以使用VirtualBox作为提供者,而使用Docker作为预配者。


23
世界刚刚变得疯狂;)我们可以使用docker provider运行游民,在游民内部运行docker容器
Andrzej Rehmann 2016-3-24

@ zainengineer,Windows上用于Vagrant的Docker提供程序是否仍使用boot2docker或使用Docker Toolbox的某些变体?
Derek Mahar

@zainengineer您是否具有指向说明性示例的链接(而不是无聊的文档)?
弗拉德(Wlad)

16

两者都使用是应用程序交付测试的重要组成部分。我才刚刚开始接触Docker,并非常认真地考虑一个应用程序团队,该团队在构建和交付其软件方面具有极其复杂的条件。想想经典的Phoenix项目/持续交付情况。

这种想法是这样的:

  • 拿一个Java / Go应用程序组件并将其作为容器构建(请注意,不确定应用程序应该在容器中构建还是先构建然后安装到容器中)
  • 将容器交付给Vagrant VM。
  • 对所有应用程序组件重复此操作。
  • 迭代要编码的组件。
  • 持续测试对由Vagrant管理的VM的交付机制
  • 知道何时该部署容器时,请熟睡,与Docker之前相比,集成测试的持续性要高得多。

这似乎是米切尔(Mitchell)的说法的逻辑延伸,该说法是“流浪者”是用于发展的,并结合了“持续交付”中的Farley / Humbles思维。如果我作为开发人员能够缩小集成测试和应用交付方面的反馈循环,那么将会出现更高质量和更好的工作环境。

作为开发人员,我一直在不断地向VM发送容器并更全面地测试应用程序,这意味着将进一步简化生产版本。

因此,我将Vagrant演变为一种利用Docker对应用程序部署产生的可怕后果的方式。


您是否有关于此的博客文章?现在已经快两年了,进展如何?还在与docker一起使用流浪者还是仅与docker和docker-fleat / machine一起使用?
Andrzej Rehmann

我所在的公司被收购,他们删除了我所有的@Hoto内容。简短的答案是,我在家中为宠物项目使用docker-machine。在工作中,我是<gulp>经理</ gulp>,并且不做很多技术工作。我们没有使用Docker的计划,因此我们的工具通常是Vagrant。
Boyd Hemphill

10

绝对是Docker的胜利!

如您所知,Vagrant用于虚拟机管理,而Docker用于软件容器管理。如果您不知道它们之间的区别,则为:一个软件容器可以与其他软件容器共享同一台机器和内核。使用容器可以节省资金,因为您不会浪费多个操作系统(内核)上的资源,因此每个服务器可以打包更多软件,从而保持良好的隔离度。

当然,这是一门应对自己的难题和挑战的新学科。

如果您的需求超出了单机资源限制,请选择Docker Swarm。


8

在实际的Oracle Java杂志上,有一篇非常有用的文章,内容涉及将Docker与Vagrant(和Puppet)结合使用:

结论

与传统的VM相比,Docker的轻量级容器速度更快,并且已成为开发人员和CD和DevOps计划的一部分而受到欢迎。如果您的目的是隔离,那么Doc​​ker是一个绝佳的选择。Vagrant是一个VM管理器,使您可以编写单个VM的配置脚本并进行配置。但是,这是依赖于VirtualBox的VM(或另一个VM管理器)的开销相对较大。它要求您使硬盘驱动器空闲,该硬盘驱动器可能很大,需要大量RAM,并且性能可能欠佳。Docker通过LXC使用内核cgroup和名称空间隔离。这意味着您使用与主机和相同的ile系统相同的内核。在抽象性方面,Vagrant比Docker高一个级别,因此它们实际上不是可比的。配置管理工具(例如Puppet)被广泛用于供应目标环境。使用Docker可以轻松重用现有的基于Puppet的解决方案。您还可以分割您的解决方案,以便Puppet可以配置基础结构。中间件,业务应用程序本身或两者都由Docker预置; Docker由Vagrant包装。借助这些工具,您可以根据自己的情况做最好的事情。

如何在DevOps中构建,使用和编排Docker容器 http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0


1
因此,许多T的失踪
保罗Verest
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.