Vagrant命令(四)
SNAPSHOT
命令:vagrant snapshot
这个命令是用来管理客户机快照的。快照主要是记录客户机某个时间点的状态。你可以快速的进入这个快照的状态。有了快照,就可以快速的返回到前一个状态。当然并不是所有的虚拟机都支持快照,如果虚拟机不支持快照的话,会报错。这个命令还有更多的子命令
- push
- pop
- save
- restore
- list
- delete
SNAPSHOT PUSH
命令: vagrant snapshot push
这个命令创建一个快照,把快照放进快照的堆栈里面。这个命令是vagrant snapshot save的简单版本,不需要指定保存的名字。当用相反的命令vagrant snapshot pop,它将会恢复保存这个压缩状态。
SNAPSHOT POP
命令:vagrant snapshot pop
这个命令是vagrant snapshot push的反命令,它将恢复压缩状态。
选项:
--[no-]provision-强制虚拟机提供程序运行(或者禁止运行)
--no-delete-当恢复状态的时候,禁止删除快照
SNAPSHOT SAVE
命令:vagrant snapshot save NAME
这个命令是保存一个新的快照,如果用了这个命令,pop和push命令最好别用了。
SNAPSHOT RESTORE
命令:vagrant snapshot restore NAME
这个命令恢复指定名字的快照。
--[no-]provision-强制虚拟机运行
SNAPSHOT LIST
命令:vagrant snapshot list
这个命令是列出所有的快照
SNAPSHOT DELETE
命令:vagrant snapshot delete NAME
这个命令删除指定名字的快照。一些虚拟机必须得先把子快照删掉。Vagrant不会关心是否删除子快照。如果虚拟机这么要求的,必须按照保存顺序,相反的顺序删除。
SSH
命令:vagrant ssh[name|id][--extra_ssh-args]
这个命令会通过ssh的方式连接虚拟机。
如果--后面跟着命令,那这些命令将会直接通过ssh执行。这就让你可以传递任何指定的命令比如说反转隧道的命令,传递到ssh.
选项:
-c COMMAND 或者--command COMMAND-这个运行一个单一的SSH命令。打印标准输出、标准错误或者退出。
背景知识:
如果你指定运行的命令在后台运行,它将会立刻结束。这主要因为Vagrant运行这个命令,主要是在shell上下文环境中运行。如果shell退出,子进程也会退出。为了避免出现这个问题,需要把进程同shell分离出来。一个可以分离的命令是nohup
SSH CONFIG
命令:vagrant ssh-config [name|id]
这个命令主要是从SSH显示出SSH配置文件,到正在运行的机器中
选项:
--host NAME -显示配置信息的主机名字
STATUS
命令:vagrant status[name|id]
这个命令主要是显示vagrant管理的虚拟机的状态。这个命令很简单,尤其是当熟练使用vagrant的时候。当你忘记vagrant机器是在运行还是挂起还是没有创建的时候。这个命令会告诉你潜在客户机状态。
SUSPEND
命令:vagrant suspend[name|id]
这个命令是挂起vagrant管理的机器,而不是关机或者销毁。
挂起状态主要是保存某个时间点的机器状态,当你重启的时候。他就会从保存的时间点快速的运行。当然这样也是有代价的,需要额外的存储空间来保存虚拟机的RAM状态。但是,当挂起的时候并不消耗主机的内存和CPU。
UP
命令:vagrant up[name|id]
这个命令主要是通过创建的vagrantfile创建客户机
这个是vagrant中一个非常重要的命令。任何用vagrant的人必须经常使用这个命令。
选项:
--[no-]destroy-on-error-删除最新创建的虚拟机,如果报错,或者不可遇见的错误发生。这个命令只有当第一次使用vagrant up的时候发生。默认设置也是这样设置的。
--[no-]install-provider-如果需要的虚拟机没有安装,vagrant会自动的安装。默认情况下这个也是这么设置的。
--[no-]parallel-提供多台机器并行运行,如果虚拟机支持的话。
--provider x-根据提供的虚拟机运行,默认的是'virtualbox'
--provision--强制虚拟机程序运行
--provision-with x,y,z-这个将会运行给定的提供者。例如你有:shell和:chef_solo,运行vagrant provision --provision-with shell仅仅运行shell
version
命令:vagrant version
这个命令主要是返回已经安装最新的可用的vagrant版本。为了获得最新的版本,这个命令必须可以联网。如果你想看看最新的安装的版本只需要用 vagrant --version
其他命令:
除了之前讲过的命令。还有一些不常见的命令。我们称呼他们为“非基本子命令”。可以通过运行vagrant list-commands来显示所有的不常见的子命令。不常见的子命令有:
- docker-exec
- docker-logs
- docker-run
- rsync
- rsync-auto
DOCKER命令
Docker提供了一些vagrant额外的命令来交互。
docker-exec
vagrant docker-exec可以被用来一次性运行当前的docker容器。如果docker容器没有运行,将会返回错误。
$ vagrant docker-exec app -- rake db:migrate
这个命令将会运行rake db:migrate 在一个app上下文的容器里面。注意这里的Name和虚拟机的name一致,而不是Docker容器的名字。
Vagrant.configure(2) do |config|
config.vm.provider "docker" do |d|
d.image = "consul"
end
end
这个vagrantfile将会运行一个正式的Docker管理的镜像。然而与vagrant命令相关联的docker-exec在这个示例中是
$ vagrant docker-exec -it -- /bin/sh
实际上这个命令是
$ vagrant docker-exec default -it -- /bin/sh
因为这里的'default'是VM的第一个定义的默认名字。在下面的多机器的Vagrant安装中,‘name’是和VM的名字一致而不是和容器的名字
Vagrant.configure do |config|
config.vm.define "web" do
config.vm.provider "docker" do |d|
d.image = "nginx"
end
end
config.vm.define "consul" do
config.vm.provider "docker" do |d|
d.image = "consul"
end
end
end
下面的命令是无效的
# Not valid
$ vagrant docker-exec -it nginx -- /bin/sh
主要是因为VM的名字是'web',所以正确的名字是
$ vagrant docker-exec -it web -- /bin/sh
正式基于这个原因,建议VM的名字和容器的名字一致。在上面的例子中,进入相应的容器的命令是含糊不清的。
$ vagrant docker-exec -it consul -- /bin/sh
docker-logs
vagrant docker-logs可以也被用来查看正在运行容器的日志。主要是因为大多数的docker容器是单线程的,这个主要是用来查看那个进程的日志。同时这个日志可以只显示最后的部分。
docker-run
vagrant docker-run可以被用来运行一次Docker容器。这个一次性的Docker容器将会开始共享所有卷、连接等等。下面的例子
$ vagrant docker-run app -- rake db:migrate
这个命令将会运行rake db:migrate 在app容器的上下文环境中