vagrant学习笔记 - 基本命令的使用

vagrant基本命令,根据操作的目的,可以对基本命令进行分类:

1 操作镜像

box package

2 操作虚拟机

connect destroy halt init powershell provision rdp reload resume share snapshot ssh suspend up

3 监控虚拟机

global-status ssh-config port status

4 其他

help login plugin push version

1 操作镜像

该命令有两个,用来管理本地镜像

1.1 vagrant box

1.1.1 添加镜像到本地仓库

$ vagrant box add [box-name] [box镜像文件或镜像名]

1.1.2 移除本地镜像

$ vagrant box remove [box-name]

box多版本共存的情况

如果box升级过,那么在box list中会出现两个同名,但版本不同的镜像。如:

$ vagrant box list |grep coreos

coreos-alpha                         (virtualbox, 745.1.0)

coreos-alpha                         (virtualbox, 928.0.0)

使用该镜像创建虚拟机的时候,默认会使用高版本的box。

如果想使用低版本,需要修改Vagrantfile,指定box-version

在config.vm.box=xxx下一行,如上面的例子中,在“config.vm.box = "coreos-alpha"”后面增加一行配置信息:

config.vm.box_version = "745.1.0"

同样,如果想删除一个box,如下操作会失败:

$ vagrant box remove coreos-alpha

You requested to remove the box 'coreos-alpha' with provider

'virtualbox'. This box has multiple versions. You must

explicitly specify which version you want to remove with

the `--box-version` flag or specify the `--all` flag to remove all

versions. The available versions for this box are:

 * 745.1.0

 * 928.0.0

这时有两个选择:

- vagrant box remove coreos-alpha --all

删除所有同名镜像

- vagrant box remove coreos-alpha --box-version=745.1.0

删除指定版本的镜像

1.1.3 升级镜像

检查镜像是否有升级?

$ cd ~/vm/ubuntu

$ vagrant box outdated

Checking if box 'ubuntu/trusty64' is up to date...

A newer version of the box 'ubuntu/precise64' is available! You currently

have version '20160122.0.0'. The latest is version '20160209.0.0'. Run

`vagrant box update` to update.

中央仓库有新版更新了,手动更新box。更新的结果并不是替换旧版本,而是在本地仓库中增加了新版的box镜像。

$ cd ~/vm/ubuntu

$ vagrant box update

==> default: Checking for updates to 'ubuntu/precise64'

    default: Latest installed version: 20160120.0.0

    default: Version constraints:

    default: Provider: virtualbox

==> default: Updating 'ubuntu/precise64' with provider 'virtualbox' from version

==> default: '20160120.0.0' to '20160201.0.0'...

==> default: Loading metadata for box 'https://atlas.hashicorp.com/ubuntu/precise64?access_token=cXR0wCgWXoRpMw.atlasv1.ydBAS4ev1YCWzSK4S1l6iVjssRbO5Q50a8YVnEPqoyYjcQVeaMdEsiQ8rz8tOcSHLuY'

==> default: Adding box 'ubuntu/precise64' (v20160201.0.0) for provider: virtualbox

    default: Downloading: https://atlas.hashicorp.com/ubuntu/boxes/precise64/versions/20160201.0.0/providers/virtualbox.box

==> default: Successfully added box 'ubuntu/precise64' (v20160201.0.0) for 'virtualbox'!

$ vagrant box list | grep precise64

ubuntu/precise64                     (virtualbox, 20160120.0.0)

ubuntu/precise64                     (virtualbox, 20160201.0.0)

也可以检查本地仓库中的所有镜像是否有升级,使用 --global 开关,这时候不需要进入工作目录

$ vagrant box outdated --global

* 'ubuntu/trusty64' is outdated! Current: 20160122.0.0. Latest: 20160209.0.0

* 'ubuntu/precise64' (v20160201.0.0) is up to date

* 'pollyduan/bento_oracle_xe' wasn't added from a catalog, no version information

* 'phusion/ubuntu-14.04-amd64' (v2014.04.30) is up to date

* 'hashicorp/precise32' (v1.0.0) is up to date

* 'hashicorp/boot2docker' (v1.7.8) is up to date

* 'debian/jessie64' wasn't added from a catalog, no version information

* 'coreos-alpha' is outdated! Current: 928.0.0. Latest: 955.0.0

* 'centos7' wasn't added from a catalog, no version information

* 'centos65' wasn't added from a catalog, no version information

* 'centos64' wasn't added from a catalog, no version information

* 'bento/ubuntu-14.04' (v2.2.3) is up to date

* 'bento/opensuse-13.2-x86_64' (v2.2.1) is up to date

* 'bento/freebsd-10.2' (v2.2.3) is up to date

* 'bento/fedora-22' (v2.2.3) is up to date

* 'bento/debian-8.2' (v2.2.3) is up to date

* 'bento/centos-7.2' (v2.2.3) is up to date

* 'bento/centos-6.7' (v2.2.3) is up to date

不进入工作目录进行升级

$ vagrant box update --box coreos-alpha

Checking for updates to 'coreos-alpha'

Latest installed version: 928.0.0

Version constraints: > 928.0.0

Provider: virtualbox

Updating 'coreos-alpha' with provider 'virtualbox' from version

'928.0.0' to '955.0.0'...

Loading metadata for box 'http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vagrant.json'

Adding box 'coreos-alpha' (v955.0.0) for provider: virtualbox

Downloading: http://alpha.release.core-os.net/amd64-usr/955.0.0/coreos_production_vagrant.box

Box download is resuming from prior download progress

Progress: 1% (Rate: 92912/s, Estimated time remaining: 0:38:09)

...

1.2 打包镜像

创建vm以后,我们自己根据需要安装软件,配置环境,都一切就绪了。如何分发给小伙伴使用呢?这里就要涌到package命令了,把镜像打包分发。

$ ll ~/VirtualBox\ VMs/ |grep ubuntu

drwx------  6 pollyduan  staff  204  2  2 11:18 ubuntu_default_1453944793418_7699

先看一下我们的vm目录名,这里有个容易混淆的目录:

- Vagrantfile所在的目录——vagrant的工作目录

- 虚拟机文件所在的目录——virtualbox的工作目录

这两个目录名不一定相同,如果在Vagrantfile中指定了vb.name,virtualbox工作目录就取这个名字;否则,命名为:vagrant工作目录_随机字符串。

或者,也可以使用virtual box的管理工具来看vm的名称。

$ VBoxManage list vms|grep ubuntu

"ubuntu_default_1453944793418_7699" {0362edc2-548b-400b-a55d-776b0a24cd8d}

package命令要使用的是virtual box工作目录。

格式:vagrant package --base [virtualbox的工作目录] --output [保存的文件名,缺省为package.box]

$ vagrant package --base ubuntu_default_1453944793418_7699 --output ubuntu_myproject_test.box

==> ubuntu_default_1453944793418_7699: Clearing any previously set forwarded ports...

==> ubuntu_default_1453944793418_7699: Exporting VM...

==> ubuntu_default_1453944793418_7699: Compressing package to: /Users/pollyduan/vm/tmp/ubuntu_myproject_test.box

导出后,可以通过IM、ftp或其他方式分发给小伙伴,那么大家使用的环境就是一致的了。

2 操作虚拟机

2.1 启动vm

2.1.1 对于单虚拟机

$ vagrant up

2.1.2 如果同一个Vagrantfile定义了一个以上的虚拟机,则:

$ vagrant up [vm-name]

其他命令类似。如果省略vm-name,则依次启动所有vm。

2.2 重启

$ vagrant reload [vm-name]

2.3 关机

$ vagrant halt [vm-name]

2.4 销毁虚拟机

$ vagrant destroy [vm-name]

2.5 ssh登录虚拟机

$ vagrant ssh [vm-name]

2.6 休眠与唤醒

这一对冤家也无需多说,对于开发环境来说,个人觉得用处不是很大。

$ vagrant suspend

==> default: Saving VM state and suspending execution...

$ vagrant status

Current machine states:

default                   saved (virtualbox)

To resume this VM, simply run `vagrant up`.

$ vagrant resume

==> default: Resuming suspended VM...

==> default: Booting VM...

…...

2.7 快照

vagrant snapshot命令是vm的月光宝盒,如果vm中有任务没有跑完,需要关闭virtual box,就可以给vm做一个快照,保存vm当前所有的状态,在virtualbox重新启动后,再回复快照。

2.7.1 查看当前保存的快照

$ vagrant snapshot list

==> default: No snapshots have been taken yet!

2.7.2 创建一个命名快照

$ vagrant snapshot save shot1

==> default: Snapshotting the machine as 'shot1'...

$ vagrant snapshot list

shot1

2.7.3 恢复快照

$ vagrant snapshot restore shot1

==> default: Forcing shutdown of VM...

==> default: Restoring the snapshot 'shot1'...

…...

恢复后,快照会一直存在,直到你手动删除它。

2.7.4 删除快照

$ vagrant snapshot delete shot1

==> default: Deleting the snapshot 'shot1'...

Progress: 90%

Progress: 100%

==> default: Snapshot deleted!

这个操作会删除持久化的数据文件,稍微有点慢,耐心等待。这个内在的原理没有深入研究,有点不太理解,删除一个文件理论上应该比保存一个文件更快才对。

2.7.5 盗梦空间

push和pop,每调用一次push命令会自动创建一个命名快照,名为:push+一串随机数,如:push_1455524411_6632;每调用一次pop,会逐级恢复到最新的快照,并删除快照。看例子:

$ vagrant snapshot list

==> default: No snapshots have been taken yet!

$ vagrant snapshot push

==> default: Snapshotting the machine as 'push_1455525041_2882'...

$ vagrant snapshot list

push_1455525041_2882

$ vagrant snapshot push

==> default: Snapshotting the machine as 'push_1455525049_7456'...

$ vagrant snapshot push

==> default: Snapshotting the machine as 'push_1455525058_6891'...

$ vagrant snapshot list

push_1455525041_2882

push_1455525049_7456

push_1455525058_6891

$ vagrant snapshot pop

==> default: Forcing shutdown of VM...

==> default: Restoring the snapshot 'push_1455525058_6891'...

==> default: Deleting the snapshot 'push_1455525058_6891'...

==> default: Snapshot deleted!

$ vagrant snapshot list

push_1455525041_2882

push_1455525049_7456

Tips: 文本的日志看起来还不够形象,在push三个snapshot后在virtual box中是树形显示的;每次pop,树枝会逐级退回,看起来更像穿越的感觉。

Tips: 在pop清空之前,随时可以通过restore恢复其中一个快照,同样快照不会删除;不影响pop的测试。

2.8 远程连接分享

远程连接通过share connect两个命令可以实现通过本机vagrant连接另外一台host上的虚机。

2.8.1 允许ssh连接

$ vagrant share --ssh

==> default: Detecting network information for machine...

    default: Local machine address: 127.0.0.1

    default:

    default: Note: With the local address (127.0.0.1), Vagrant Share can only

    default: share any ports you have forwarded. Assign an IP or address to your

    default: machine to expose all TCP ports. Consult the documentation

    default: for your provider ('virtualbox') for more information.

    default:

    default: An HTTP port couldn't be detected! Since SSH is enabled, this is

    default: not an error. If you want to share both SSH and HTTP, please set

    default: an HTTP port with `--http`.

    default:

    default: Local HTTP port: disabled

    default: Local HTTPS port: disabled

    default: SSH Port: 2200

    default: Port: 2200

==> default: Generating new SSH key...

    default: Please enter a password to encrypt the key: [输入授权密码]

    default: Repeat the password to confirm:[再输一次]

    default: Inserting generated SSH key into machine...

==> default: Checking authentication and authorization...

==> default: Creating Vagrant Share session...

    default: Share will be at: vile-ibex-8238

==> default: Your Vagrant Share is running! Name: vile-ibex-8238

==> default:

==> default: You're sharing your Vagrant machine in "restricted" mode. This

==> default: means that only the ports listed above will be accessible by

==> default: other users (either via the web URL or using `vagrant connect`).

==> default:

==> default: You're sharing with SSH access. This means that another user

==> default: simply has to run `vagrant connect --ssh vile-ibex-8238`

==> default: to SSH to your Vagrant machine.

==> default:

==> default: Because you encrypted your SSH private key with a password,

==> default: the other user will be prompted for this password when they

==> default: run `vagrant connect --ssh`. Please share this password with them

==> default: in some secure way.

Tips: 你可以通过--name指定一个名称,否则会随机生成一个共享名,如本例中的vile-ibex-8238

2.8.2 连接远端ssh虚机

$ vagrant connect --ssh vile-ibex-8238 --static-ip 10.2.136.211

Loading share 'vile-ibex-8238'...

The SSH key to connect to this share is encrypted. You will require

the password entered when creating to share to decrypt it. Verify you

access to this password before continuing.

Press enter to continue, or Ctrl-C to exit now.[回车]

Password for the private key:[输入授权密码]

Executing SSH...

vagrant@vagrant-ubuntu-trusty-64:~$

2.8.3 共享http

vagrant share可以把host主机的http开放到远端,供任何人访问,这好像跟vm没什么关系,但的确它发生了。

$ ~/apache-tomcat-8.0.28/bin/startup.sh

$ vagrant share --http 80

==> default: Detecting network information for machine...

    default: Local machine address: 127.0.0.1

    default:

    default: Note: With the local address (127.0.0.1), Vagrant Share can only

    default: share any ports you have forwarded. Assign an IP or address to your

    default: machine to expose all TCP ports. Consult the documentation

    default: for your provider ('virtualbox') for more information.

    default:

    default: Local HTTP port: 80

    default: Local HTTPS port: disabled

    default: Port: 2200

==> default: Checking authentication and authorization...

==> default: Creating Vagrant Share session...

    default: Share will be at: enchanting-buffalo-1493

==> default: Your Vagrant Share is running! Name: enchanting-buffalo-1493

==> default: URL: http://enchanting-buffalo-1493.vagrantshare.com

==> default:

==> default: You're sharing your Vagrant machine in "restricted" mode. This

==> default: means that only the ports listed above will be accessible by

==> default: other users (either via the web URL or using `vagrant connect`).

我的host电脑在内网,在外网的任意一台电脑上,访问http://enchanting-buffalo-1493.vagrantshare.com,奇迹发生了。

话说这个有什么用呢?别忘记,vagrant有一个端口映射的功能,在后面的Vagrantfile配置里会提到,这样做的结果,就是可以在互联网任意一个角落可以访问到你的虚机的http服务。

2.9 windows相关的操作

powershelgl和rdp是windows vm相关的操作,未做测试,忽略。

2.10 虚机环境部署

provision用于通过Vagrantfile配置文件,对vm进行部署,如安装软件,发布应用等,在这里不多说,专门一章来记录。

2.11 指定vmid操作虚拟机

在3.3.2中,我们可以看到当前工作机中的所有虚机,其中第一列数据为vmid,我们可以无需进入vagrant工作目录,操作这些虚机。如:

$ vagrant up 63093ce

该方式适用于前面提到的up、reload、halt、destroy等命令。

3 监控虚拟机

3.1 查看sshd配置信息

$ vagrant ssh-config

Host default

  HostName 127.0.0.1

  User vagrant

  Port 2222

  UserKnownHostsFile /dev/null

  StrictHostKeyChecking no

  PasswordAuthentication no

  IdentityFile "/Users/pollyduan/vm/ubuntu/.vagrant/machines/default/virtualbox/private_key"

  IdentitiesOnly yes

  LogLevel FATAL

3.2 查看虚拟机开放的端口

$ vagrant port

The forwarded ports for the machine are listed below. Please note that

these values may differ from values configured in the Vagrantfile if the

provider supports automatic port collision detection and resolution.

    22 (guest) => 2222 (host)

3.3 查看虚拟机状态

3.3.1 查看当前vm状态

$ cd ~/vm/ubuntu

$ vagrant status

Current machine states:

default                   poweroff (virtualbox)

The VM is powered off. To restart the VM, simply run `vagrant up`

状态可能是:

not create | 执行vagrant init命令后,从未启动过

poweroff | 关机

running | 运行中

saved | 休眠

3.3.2 查看全部虚机状态

此命令无需进入vagrant工作目录。

$ vagrant global-status

id       name       provider   state    directory

--------------------------------------------------------------------------------

be5dee2  mfsmaster  virtualbox poweroff /Users/pollyduan/vm/mfs

a523de6  mfschunk1  virtualbox poweroff /Users/pollyduan/vm/mfs

8377e0d  mfschunk2  virtualbox poweroff /Users/pollyduan/vm/mfs

b772b1f  metalogger virtualbox poweroff /Users/pollyduan/vm/mfs

8a5f10e  mfsclient  virtualbox poweroff /Users/pollyduan/vm/mfs

63093ce  default    virtualbox poweroff /Users/pollyduan/vm/ubuntu

你可能会发现,为什么有的是default,有的是有名字的。这就是因为mfsxxxx是在vagrantfile中指定了vb.name,他对应的virtualbox工作目录也是这个值,而ubuntu这个虚机没有指定,所以是default,而且其virtualbox工作目录也是比较长的——ubuntu_default_1453944793418_7699。

global-status统计信息不是实时的,所有不能保证数据是绝对准确的。如果在vagrant up启动后,我们在virtualbox管理终端关闭vm,global-status是捕获不到的,它还是会显示running状态。

截至1.8.1还是这样的,应该算是一个bug。处女座可能无法接受这个现实,那么你可以进入vagrant工作目录,手动再指定一次vagrant halt,状态就同步了。

4 其他命令

4.1 help

略。

 

4.2 login

登录到中央仓库

4.3 plugin

插件管理,略。

4.4 push

发布镜像到中央仓库

4.5 version

略。

时间: 2024-12-13 15:13:21

vagrant学习笔记 - 基本命令的使用的相关文章

vagrant学习笔记 - Vagrantfile

<vagrant学习笔记 - 入门>中的hello vagrant配置文件,只是最基本的配置,它使用缺省的box配置初始化了一个虚拟机.有时候,我希望对vm做更详尽的配置,比如配置一次创建一组vm,搭建一个mfs的测试环境,他需要一台服务器做mfsmaster,两台服务器做mfs chunk server,一台服务器做metalogger,还有一台服务器做mfs client进行测试. 下面是一组服务测试mfs的vagrant file范例: # -*- mode: ruby -*- # vi

vagrant学习笔记 - provision

从字面上来看,provision是准备,实现的功能是在原生镜像的基础上,进行一些附加的操作,以改变虚拟机的环境,比如安装应用,发布程序等. 1 helloword 在vagrant的 Vagrant.configure(2) do |config| 节点内,加入如下代码: config.vm.provision "shell", inline: "echo hello provisio." 还有一种格式: config.vm.provision "shel

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴

JetSpeed学习笔记(一)

笔记 JetSpeed学习笔记(一) fuweilin 2005-4-7 前言 参加了公司的portal的兴趣小组,今天对portal进行学习.首先上网看了看一些portal的资料,对portal.portlet.portlet container以及JSR168等概念有个基本的了解.决定进一步实战的方式感受portal,于是学习JetSpeed.     1.  JetSpeed介绍JetSpeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现.门户可以让终端

PHP输入输出流学习笔记

  这篇文章主要介绍了PHP输入输出流学习笔记,PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符,内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器,需要的朋友可以参考下 PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符, 内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器. php://stdin, php://stdout 和 php://std

PHP学习笔记 (1) 环境配置与代码调试

一配置PHP环境 1.了解什么是PHP PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写) PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用 2.PHP的背景和优势 PHP的发展背景 1).1994年由Rasmus Lerdorf创建,开始是一个简单的Perl语言编写的程序,用统计

Node.js 学习笔记之简介、安装及配置

 本文是Node.js学习笔记系列文章的第一篇,主要给大家讲解的是在Windows和Linux上安装Node.js的方法.软件安装版本以0.12.0为例.希望大家能够喜欢.     简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅

node.js学习笔记(9) 和谐模式

众所周知,ECMAScript 是一种开放的.国际上广为接受的脚本语言规范. 它本身并不是一种脚本语言.正如在 Web 应用程序中执行有用操作的 bean 集合(例如,Netscape 的 AWT)是 Sun 的 JavaBean 规范的一种实现一样,JavaScript 是 ECMAScript 规范的一种实现. 2015年6月17日,ECMA国际发布了EcmaScript2015,即EcmaScript6(以下简称ES6)草案的正式版.ES6是继ES5之后的一次主要改进,语言规范由ES5.1

php5学习笔记(转)

php5|笔记 作者: whhwq在phpv.net看到的感觉不错/*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有