使用vagrant docker 区别与直接使用虚拟机有什么区别

lovelace521 的BLOG
用户名:lovelace521
文章数:117
评论数:210
访问量:517459
注册日期:
阅读量:5863
阅读量:12276
阅读量:298697
阅读量:1019008
51CTO推荐博文
缘由:&&&&在网上看到斌哥,爽神都写了关于vagrant的博客,都在说很强大,所以很好奇这玩意怎么个强大,然后也就自己来一发玩玩看看。真实缘由:&&&&& 说实话是电脑配置太低,win7系统,3G内存,08年的品牌机,所以扛不住Vmware的,以前也是一直在用Vmware,但是面对面前的这台电脑,也只能呵呵了~期间曾经用过一段Ubuntu,由于工作原因,需要实时QQ进行交流,所以又呵呵了~至于大家说什么wine+QQ,什么个人开发的Ubuntu上可运行的QQ,我又只能呵呵了~个人感受:&&&&& 感觉想当年玩过的H3C、Cisco的模拟器一样,Dos窗口下来完成一切,实在是有种黑的不能再黑的赶脚~&&&&& vagrant的打包功能类似Vmware的克隆,打包之后可以拿给其他人去用,统一的平台,统一的软件结构,作为开发测试的一个公共平台实在是极好的~&&&&& 重新封包的box拿到其它机器上去运行,依旧会存在网卡重新生成的情况,需要手动清除(仅针对使用 private_network的模式)&&&&&&唯一的不同点就是Vmware的克隆出来一个虚机很大很大,而vagrant重新封包依旧是小巧玲珑~关于vagrant:&&&&Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源虚拟化系统,使用 Chef创建自动化虚拟环境。详细操作步骤:工具及环境介绍:工具及环境版本下载地址宿主机环境win7 x64 旗舰版/VirtualBoxVirtualBox-4.3.12-93733-Winvagrantvagrant_1.6.3boxCentOS-6.3-x86_64-minimal.boxxshellxshell_4.0.097/download/main.html亮点来了,请仔细看额:1、安装VirtualBox&&&&(略)2、安装vagrant&&&&3、下载box&&&&4、安装xshell5、正式开始进行操作~新建一个文件夹作为工作目录650) this.width=650;" src="/wyfs02/M02/2D/0F/wKiom1OSioTR5URAAACu7S2Z7UY792.jpg" title="floder.jpg" alt="wKiom1OSioTR5URAAACu7S2Z7UY792.jpg" />打开一个dos窗口,初始化该目录,然后导入boxNote: 导入box的默认指令vagrant box add name uri& &但是由于直接制定uri的话,就相当于在线下载了,那速度是相当的慢啊,所以这里我就事先下载好 & 了,直接导入即可vagrant&init
vagrant&box&add&centos6.3&j:\迅雷下载\CentOS-6.3-x86_64-minimal.box& &650) this.width=650;" src="/wyfs02/M00/2D/10/wKioL1OSij_iG-P8AAJYBBp2EYQ738.jpg" title="import box new.jpg" alt="wKioL1OSij_iG-P8AAJYBBp2EYQ738.jpg" />修改Vagrantfile配置文件,该文件管控着虚拟机的运行我这里比较懒,直接网上找了一个相关的配置文件,修改了下,就直接用了文件来源:&&&&修改后的文档:启用了四个虚拟机,内存均为256M#&-*-&mode:&ruby&-*-
#&vi:&set&ft=ruby&:
app_servers&=&{
&&&&:http&=&&'192.168.58.20',
&&&&:php&=&&'192.168.58.21'
Vagrant.configure("2")&do&|config|
&&&&config.vm.box&=&"centos6.3"
&&&&config.vm.define&:haproxy&do&|haproxy_config|
&&&&&&&&haproxy_config.vm.network&:private_network,&ip:&"192.168.58.10"
&&&&&&&&haproxy_config.vm.network&:forwarded_port,&guest:&80,&host:&8080
&&&&&&&&config.vm.provider&:virtualbox&do&|vb|
&&&&&&&&&&&&vb.name&=&"haproxy"
vb.customize&["modifyvm",&:id,&"--memory",&"256"]
&&&&&&&&end
&&&&app_servers.each&do&|app_server_name,&app_server_ip|
&&&&&&&&config.vm.define&app_server_name&do&|app_config|
&&&&&&&&&&&&app_config.vm.hostname&=&"#{app_server_name.to_s}.vagrant.internal"
&&&&&&&&&&&&app_config.vm.network&:private_network,&ip:&app_server_ip
&&&&&&&&&&&#&app_config.vm.synced_folder&"../app",&"/opt/app"
&&&&&&&&&&&&app_config.vm.provider&"virtualbox"&do&|vb|
&&&&&&&&&&&&&&&&vb.name&=&app_server_name.to_s
vb.customize&["modifyvm",&:id,&"--memory",&"256"]
&&&&&&&&&&&&end
&&&&&&&&end
&&&&config.vm.define&:redis&do&|redis_config|
&&&&&&&&redis_config.vm.hostname&=&"redis.vagrant.internal"
&&&&&&&&redis_config.vm.network&:private_network,&ip:&"192.168.58.30"
&&&&&&&&redis_config.vm.provider&"virtualbox"&do&|vb|
&&&&&&&&&&&&vb.name&=&"redis"
&&&&&&&&&&&&vb.customize&["modifyvm",&:id,&"--cpuexecutioncap",&"50"]
&&&&&&&&&&&&vb.customize&["modifyvm",&:id,&"--memory",&"256"]
&&&&&&&&end
end开启虚拟机,这里你可以完全开启,也可以只开启一台PS: 第一次开启的时候,建议一台一台的开启,这样的话方便记录ssh连接端口号(个人偏好使用xshell)&&&&650) this.width=650;" src="/wyfs02/M01/2D/10/wKiom1OSirrjv-atAAMGtNXhIRM901.jpg" title="up machine.jpg" alt="wKiom1OSirrjv-atAAMGtNXhIRM901.jpg" />使用xshell链接测试连接账号:vagrant连接密码:vagrantsu到root下密码:vagrant650) this.width=650;" src="/wyfs02/M02/2D/10/wKiom1OSjRqik3AYABNM92GMGRI148.gif" title="auth.gif" alt="wKiom1OSjRqik3AYABNM92GMGRI148.gif" />常用命令vagrant&box&list&&&&&&&&&&&&&#&列出当前导入的box
vagrant&destory&&&&&&&&&&&&&&#&***machine
vagrant&box&remove&[name]&&&&#&移除box
vagrant&up&[name]&&&&&&&&&&&&#&启动machine&&&&&&&&&&&&&&&&&
vagrant&halt&[name]&&&&&&&&&&#&关闭machine&
vagrant&status&[name]&&&&&&&&#&查看machine的状态& &650) this.width=650;" src="/wyfs02/M01/2D/10/wKiom1OSkgvigxC3AAOL1p0Y_aA953.jpg" title="help.jpg" alt="wKiom1OSkgvigxC3AAOL1p0Y_aA953.jpg" />打包&&&&关闭当前机器,然后打包(我这里为haproxy这台机器安装了epel源)& &650) this.width=650;" src="/wyfs02/M01/2D/10/wKioL1OSk9aQOWCQAAFUqYl-aSc429.jpg" title="check status.jpg" alt="wKioL1OSk9aQOWCQAAFUqYl-aSc429.jpg" />& &650) this.width=650;" src="/wyfs02/M01/2D/11/wKioL1OSlV_i0lmnAALGREpaV-E798.jpg" title="export box.jpg" alt="wKioL1OSlV_i0lmnAALGREpaV-E798.jpg" />写到这里好像要打完收工了,还有啥~额,还有好多知识没有说vagrant的几种网卡类型使用过程中碰到的问题,后续在更新吧~使用感受:& & 搭建了一个haproxy + tomcat的环境,三台机器全开,占用系统资源也不是很大,跑起来绝对没问题,也挺流畅~参考文档:斌哥的网站: 爽神的网站: Vagrantfile借用站点:官方站点: 吐槽大会:这玩意用起来也就那么回事,是蛮方便的,但是对于程序猿来说也是一个头大的事情,而且Dos窗口那么不和谐~ 等到图形界面和VirtualBox完全整合了的话,估计就是一键点击下的事了,不过到那个时候又不知道会有什么新的工具出来,总的来说,能用,有亮点,但是亮点不是完全超越性的~ 本文出自 “” 博客,谢绝转载!
了这篇文章
类别:┆阅读(0)┆评论(0)
10:20:19 15:22:22Docker学习总结之Docker与Vagrant之间的特点比较_服务器应用_Linux公社-Linux系统门户网站
你好,游客
Docker学习总结之Docker与Vagrant之间的特点比较
来源:Linux社区&
作者:vikings
  以下内容均出自Vagrant作者(&Hashimoto)与Docker作者()在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集成了,因此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中集成了。所以在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安装完成后,就可以使用同样的命令进行操作了。这样,世界一下就美好了:你通过轻量级的容 器可以更好的测试和开发你的应用,并且很容易的将这些应用进行分发(比如通过&)。而你不需要了解如何管理这些虚拟机,而仅仅把虚拟机当做完成事情中的一个环节而已。
  理论上,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适合用来管理应用环境。
6/7系列安装Docker &
Docker的搭建Gitlab CI 全过程详解 &
Docker安装应用(CentOS 6.5_x64) &
Docker 和一个正常的虚拟机有何区别? &
在 Docker 中使用 MySQL &
Docker 将改变所有事情 &
Docker安装应用(CentOS 6.5_x64) &
Docker 的详细介绍:Docker 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (05月04日)
& (03月07日)
& (04月24日)
& (02月21日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款某一人似曾相识、某一刻似曾经历
京ICP备号-1参考文章:http://blog.smdcn.net/article/1308.html
准备工作:
下载安装 VirtualBox :
下载安装 Vagrant :
下载需要使用的 box :
官方提供的范例:/precise32.box
还可以在&&这里下载更多不同系统甚至是已经配置好环境直接可以用的box,虽然可以直接在Vagrant直接使用网址,由Vagrant自动下载安装,但是考虑到网络情况,还是建议自行先下载好。
设置环境:
第一步,新建目录
mkdir -p vagrant/debiancd vagrant/debian
第二步,初始化文件
vagrant box add debian-local /home/wangkongming/software/pmv3.box
debian-local 表示指定默认的box,也可以为box指定名称,比如 debian ,使用base时,之后可以直接使用 vagrant init 进行初始化,如果自行指定名称,则初始化的时候需要指定box的名称。
pmv3.box 是box对应的文件名,这里可以是本地保存box的路径,也可以是可以下载box的网址,如果是网址的话,Vagrant会自动启动下载。
设置好box之后,在当前工作目录运行
vagrant init
生成对应的Vagrantfile。通过文本编辑器打开Vagrantfile可以进行一些进一步的常用配置:
网络配置:
Vagrant的网络有三种模式
1、较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置:
config.vm.network :forwarded_port, guest: 80, host: 8080
guest: 80 表示虚拟机中的80端口,&host: 8080 表示映射到宿主机的8080端口。
2、如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP&,在Vagrantfile中配置:
config.vm.network :private_network, ip: "192.168.1.104"
192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可
3、如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP,那么在Vagrantfile中配置:
config.vm.network :public_network
目录映射:
既然是开发环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。
默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant 目录,当前目录下的文件可以直接在 /vagrant 下进行访问,当然也可以在通过 ln 创建软连接,如
ln -fs /vagrant/wwwroot /var/www
来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:
config.vm.synced_folder "wwwroot/", "/var/www"
前面的参数 &wwwroot/& &表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: &d:/www/&
后面的参数 &/var/www& 表示虚拟机中对应映射的目录。
在不进入虚拟机的情况下,还可以使用下面的命令对 虚拟机进行管理:
vagrant up&(启动虚拟机)vagrant halt&(关闭虚拟机&&对应就是关机)vagrant suspend&(暂停虚拟机&&只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)vagrant resume&(恢复虚拟机 && 与前面的暂停相对应)vagrant destroy&(删除虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留)
当在启动Vagrant后,对于虚拟机有进行过安装环境相关的配置,如果并不希望写在Vagrant的启动shell里面每次都重新安装配置一遍,可以将当前配置好的虚拟机打包成box,
vagrant package --output NAME --vagrantfile FILE
可选参数:
--output NAME : (可选)设置通过NAME来指定输出的文件名
--vagrantfile FILE:(可选)可以将Vagrantfile直接封进box中
注:如果网络模式中使用 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:
sudo rm -f /etc/udev/rule.d/70-persistent-net.rules
制作完成之后直接将box文件拿到其他计算机上配置即可使用。
更多信息可以参考官方文档:
附:我本机上的vagrantfile文件
Vagrant.configure(2) do |config|
config.vm.box = "debian-local"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.1.88"
config.vm.synced_folder "/home/wangkongming/files/works/code/kfz-pm", "/data/webroot/pmv2"
阅读(...) 评论()}

我要回帖

更多关于 vagrant 删除虚拟机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信