使用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 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

STOMP协议介绍

STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Orie...

3396
来自专栏运维小白

19.13/19.14 配置邮件告警

配置邮件告警 使用163或者QQ邮箱发告警邮件 首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务 开启并记录授权码 然后到监控中心设置邮件告警 ...

22110
来自专栏bboysoul

在树莓派上搭建dns缓存服务器

最近一直在研究dns服务器,如果在本地搭建dns服务器我觉得没什么必要,因为我局域网中的机器不是特别多,但是搭建一个dns缓存服务器在树莓派上还是挺有用的,可以...

1564
来自专栏施炯的IoT开发专栏

GSM Communication on EBox4300--(3)

GSM Communication on EBox4300--(1)主要是关于EBox4300上实现GSM通信的框架;GSM Communication on...

1886
来自专栏FreeBuf

后渗透工具Koadic:你真的了解我吗?

前言: 在朋友的博客上看到推荐的一款工具Koadic,我接触了以后发现很不错这款工具的强大之处我觉得就是拿到shell后的各种模块功能,我就自己写出来发给大家看...

2295
来自专栏Seebug漏洞平台

如何通过TTL调试光猫

作者:Sebao@知道创宇404实验室 序 言 总所周知,光猫是现在每个家庭必备的一款设备,但是光猫背面写的账号密码,只是普通用户权限,会限制很多功能。这篇...

3528
来自专栏黑泽君的专栏

网络通信的三要素

3494
来自专栏代码GG之家

ANR 原理与实战技巧

? 00 手机用用,就卡卡卡。莫名其妙的出现一堆程序无响应,欲哭无泪。这是为什么呢?因为你用的android手机。 android手机,为了...

4147
来自专栏FreeBuf

披着狼皮的羊:HP打印机远程代码执行漏洞(RCE)是这样被发现的

? 打印机作为组织机构内部不可缺少的资产设备,近年来,随着各种打印固件漏洞百出,其安全性也备受关注,打印机安全与电脑安全同等重要,不容忽视。我们注意到,惠普(...

2365
来自专栏菜鸟前端工程师

JavaScript学习笔记030-前端缓存cookie0初识后端缓存session

612

扫码关注云+社区