使用Vagrant将您的笔记本电脑刻录到虚拟机

使用Vagrant将您的笔记本电脑刻录到虚拟机

(原标题:Carve Your Laptop Into VMs Using Vagrant,事实上这篇文章讲述的是在你的笔记本你电脑上使用Vagrant创建虚拟机,译者注)

如果您是开发人员或DevOps工程师,则很有可能您已经使用Vagrant - 一种可用于在笔记本电脑或台式机上创建虚拟机的个人虚拟化管理工具。通常,这意味着Windows或Mac笔记本电脑上的Linux虚拟机。

Vagrant实际上是一个管理个人计算机上虚拟机生命周期的应用程序。在底层,它需要一个虚拟机管理程序来创建和运行一个虚拟机,最经常的应用程序是VirtualBox,因为它不需要许可证(即Virtual Box是免费开源的,译者注)。同时它还支持Hyper-V和VMWare。

安装

您可以在个人计算机(虚拟化术语中所称的主机)上安装VirtualBox和Vagrant。您在计算机上创建的虚拟机被称作客户机(Guest Machine)。

下载适用于您的机器操作系统(Windows,OS-X等)以及平台和体系结构(Intel x86,AMD64等)的VirtualBox镜像。选择默认设置安装。

下载适配于您的适配于您的目标操作系统的Vagrant并安装,再次选择默认设置进行安装。

经过上面的准备,您已经准备您的第一个虚拟机并安装了SSH。

创建一个Ubuntu虚拟机

在Windows上启动命令提示符或在Mac上启动终端,运行以下命令来启动Ubuntu虚拟机。

  • cd到一个你想保留Vagrant的地方。如果需要,创建一个新的。(cd即终端中改变当前目录的命令,译者注)
  • vagrant init hashicorp/precise64
  • vagrant up

后台会进行一系列复杂的操作(我们感觉很快就会完成),但您只需要在本地机器上启动Ubuntu虚拟主机即可。

登录到客户机

在对UNIX友好的Mac上,通过SSH登陆到客户机非常简单:只需使用以下Vagrant命令:

$ vagrant ssh

在Windows上,这是相当困难的,因为它没有本地SSH客户端。当一个客户机被创建时,用户vagrant以及它的公共密钥会被添加到客户机上。该用户的专用密钥在主机上可用,公用密钥的路径和SSHD在客户机上运行的端口(SSH客户机应连接的端口)可以使用命令“vagrant ssh-config ”来查询。

$ vagrant ssh-config

Host HOST
  HostName 127.0.0.1
  User vagrant
  Port 2222
  IdentityFile /Users/USERNAME/vagrant/.vagrant/machines/HOST/virtualbox/private_key

获取这些信息后您可以用像PuTTY这样的SSH客户端访问客户机。

命令背后的操作

如果你的需求只是创建一个Ubuntu主机并且用它做点什么,那么你就不需要知道当init和up这样的命令在运行时会发生什么。但是,如果您想将Vagrant用作开发和自动化环境,则不仅需要了解上述简单的配置步骤,还要制定出基于Vagrant的解决方案。

所有使用Vagrant配置虚拟机的配置都存储在Vagrantfile中。尽管此文件的名称和位置是可配置的,但通常位于运行Vagrant命令的当前目录中。

作为示例,Vagrant init命令会生成类似于以下的Vagrantfile,该文件用于在最后一个示例中提供Ubuntu VM:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise64"
end

尽管Vagrantfile的默认版本内容很长,但大部分内容都被解释为支持的选项。上面看到是激活的配置设置。

配置客户机

VirtualBox的安装是在笔记本电脑/台式机上的一次性安装。之后,您可以在Vagrantfile中配置所需的机器,并且可以启动这些机器。

重要的是找到一个合适的基础镜像来构建你的客户机,主要是提供的操作系统风格。基础镜像被称为“盒子”,由配置项目config.vm.box指定。box“hashicorp / precise64”安装了Ubuntu 64位体系结构的一个版本。可以使用其他操作系统的盒子的示例如下:

  • Ubuntu/ trusty64
  • centos/7

客户机一经启动,就可以使用各种配置方法进行进一步配置,例如内嵌shell命令,以及本地脚本和通过URL访问的脚本。例如,通过在Vagrantfile中添加以下部分,一个本地脚本就可以作为一个配置步骤被运行:

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "script.sh"
end

在DevOps驱动的环境中,虚拟机由一些配置管理(CM)工具(如Ansible)提供。Vagrant也支持这个功能。例如,Ansible playbook playbook.yml可以针对新创建的客户机运行,方法是将其指定为Vagrantfile的配置者:

Vagrant.configure(2) do |config|
   config.vm.provision "ansible" do |ansible|
      ansible.playbook = "playbook.yml"
   end
end

客户机的生命周期

客户机在经过几个阶段之后才会从主机中删除。如果Vagrant用来管理VM的生命周期的配置步骤、脚本和playbook在Vagrantfile中被完全捕获,则可以随时重新创建。

以下是的生命周期阶段是使用的相关Vagrant命令:

up - 该命令用于启动Vagrantfile中定义的虚拟机。如果它还没有在主机上,它将被创建为新的。客户机启动并运行后,用户就可以登录。

provision - Vagrantfile中定义的预配置器可以运行并且客户机已经处于运行状态。

reload - 如果在创建客户机之后更改了Vagrantfile,则可以使用此命令重新启动具有更改了配置的VM。

suspend/resume - 顾名思义这些命令可以用来挂起或恢复客户机。

halt - 关闭客户机,但底层资源仍然会被保留。

destroy - 关闭客户机并从主机中删除相关资源。

联网

由于可以在主机上创建多个客户机,因此可以使用它们完成各种网络操作任务,所有任务均由Vagrant管理。

转发端口

客户机上打开的端口不能直接被访问。客户机端口的访问需要经由主机端口转发到所要访问的客户机端口。例如,查看VM的Vagrantfile中的以下定义:

config.vm.network "forwarded_port", guest: 80, host: 8080

在此情形下,如果HTTP服务器在客户机上的端口80上运行,则可以通过http:// host-machine-name:8080来访问它。

专用网络

客户机可以使用DHCP来分配IP地址,或者可以在Vagrantfile中分配静态IP。以下是Vagrantfile中的相关示例配置:

config.vm.network "private_network", type: "dhcp"
config.vm.network "private_network", ip: "10.30.2.144"

Vagrant也支持公共网络,以将客户机公开给互联网。由于Vagrant主要用作开发基础设备,因此我不是特别清楚它的用途。

同步的目录

宿主机器上的Vagrantfile所在的项目根目录作为/ vagrant装载在客户机上,并且也是可配置的。其他磁盘位置可以进行如下映射:

config.vm.synced_folder "www/", "/srv/www"

第一个条目是在主机上的实际存在的文件夹,第二个条目是它被安装在客户机上的位置。如果源路径不是绝对路径,则相对于根目录的路径。

使用rsync,NFS和SMB等多种方法来支持在主机和客户机之间共享目录。共享文件夹的行为将取决于使用哪种方法进行设置。

多机器环境

可以在主机上创建多个客户机,并且仅受本地可用系统资源的限制。在下面的Vagrantfile代码片段中定义了两个客户机(web客户机和db客户机):

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"
    config.vm.define "web" do |web|
        web.vm.box = "apache"
    end
    config.vm.define "db" do |db|
        db.vm.box = "mysql"
    end
end

我们上面讨论过的各种配置选项可以分别应用到每个客户机上。在最后一个例子中,这些机器也可以共享同样的配置,内嵌的配置脚本被分别应用于两台机器上。

Vagrant的真正威力会在您的笔记本电脑上设置多机环境进行开发和测试时才体现出来。由于配置这样复杂的环境所涉及的所有步骤都在Vagrantfile和相关的脚本中被捕获,因此可以在团队成员之间共享,并进行修订控制。

把它带到生产环境

如果将我们前面看到的Ansible这样的CM提供者用于构建基于Vagrant的开发环境,那么将其推广到生产环境是非常容易的。

而且,这种以代码表示的开发环境的建立和维护过程将会影响应用程序开发过程。与应用程序代码一样,Vagrant代码可以在开发团队成员之间共享,并且可以进行版本控制。

如果公司没有在数据中心或科罗拉多地区拥有任何永久的基础设备,仅仅使用公共云,则可以使用Vagrant在笔记本电脑上设置本地开发环境来降低计算成本,而笔记本电脑往往功能强大,可以运行多个客户机。

进一步阅读

The Vagrant documentation简单而且简短,如果你打算使用Vagrant进行大量工作,就必须阅读全文。

本文的版权归 Steve Wang 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏freesan44

ACP互联网架构认证笔记-EDAS企业级分布式应用服务

EDAS支持语言Java,C++,PHP。EDAS支持Idea,Eclipse;Eclipse插件安装等编译工具。EDAS初级版仅支持应用的部署管理,不支持HS...

1577
来自专栏云上大文件传输

win10和win server 2016新的TCP功能介绍

TFO允许在TCP握手期间发送和接收初始SYN分组中的数据。如果客户端和服务器都支持TFO功能,则可以减少建立到同一服务器的多个TCP连接的延迟。这是通过在初始...

3964
来自专栏Java Edge

Tair 简介1 Tair的功能2 Tair的内部结构3 数据的分布4 多备份的支持5 多机架和多数据中心的支持6 轻量级的configserver7 DataServer内部结构8 抽象的存

Tair是由淘宝网自主开发的Key/Value结构数据存储系统,在淘宝网有着大规模的应用。 在登录淘宝、查看商品详情页面或者在淘江湖和好友“捣浆糊”的时候,都...

673
来自专栏java一日一条

缓存穿透,缓存击穿,缓存雪崩解决方案分析

设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。

802
来自专栏FreeBuf

使用Docker构建安全的虚拟空间

*本文作者:Li4n06,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

1023
来自专栏小白的技术客栈

系统入侵后的排查思路及心得

入侵后的总结 入侵后的总结 昨天发布Linux被入侵及其如何检查,今天这一篇主要是一些排查思路,仅供大家参考。 ? 写在前面 首先,确保系统密码符合密码复杂...

3426
来自专栏MySQL实战分享

MongoDB 第一期 :集群搭建

MongoDB集群的搭建不算困难,只需要按部就班的配置,几分钟完成一个能用的Mongo集群绝对是有可能的,但是要搭建一个高可用的优质集群,那么需要研究的还远不止...

3942
来自专栏LanceToBigData

MySQL(一)之MySQL简介与安装

大家可能都在用MySQL,其实我也是在用MySQL的,但是你知道吗?大部分人都是在windows中使用,这里将介绍一下在windows中的安装分为安装包安装与M...

1846
来自专栏腾讯云TStack专栏

《 大话 Ceph 》 之 PG 那点事儿

《大话 Ceph 》系列文章通过通俗易懂的语言并结合基础实验,用最简单的描述来讲解 Ceph 中的重要概念。让读者对分布式存储系统有一个清晰的理解。

1.3K2
来自专栏xingoo, 一个梦想做发明家的程序员

Apache实现反向代理负载均衡

说到负载均衡LVS这套技术,有很多种实现方法。 本文所说,主要就是利用apache服务器实现反向代理,实现负载均衡。 首先,传统的正向代理如下图所示,正如我们用...

2008

扫码关注云+社区