Vagrant让我们可以通过代码的方式快速地、可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox、AWS、Docker等。它使得我们可以一次性地、自动创建多个环境相同的虚拟机,对于软件开发和测试尤其有用。
vagrant:Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。
docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
区别:Vagrant就是你的开发环境的部署工具;而docker是你的运行环境部署工具。
1、vagrant_2.2.3_x86_64.msi
官网下载地址:https://releases.hashicorp.com/vagrant/2.2.3/vagrant_2.2.3_x86_64.msi
2、VirtualBox-5.2.26-128414-Win.exe
官网下载地址:https://download.virtualbox.org/virtualbox/6.0.4/VirtualBox-6.0.4-128413-Win.exe
3、Git-2.20.1-64-bit.exe
官网下载地址:https://github.com/git-for-windows/git/releases/download/v2.20.1.windows.1/Git-2.20.1-64-bit.exe
主要使用git提供的命令行工具,提供粘贴复制等功能。
命令 | 作用 |
---|---|
vagrant box add | 添加box的操作 |
vagrant init | 初始化box的操作,会生成vagrant的配置文件Vagrantfile |
vagrant up | 启动本地环境 |
vagrant ssh | 通过ssh登录本地环境所在虚拟机 |
vagrant halt | 关闭本地环境 |
vagrant suspend | 暂停本地环境 |
vagrant resume | 恢复本地环境 |
vagrant reload | 修改了Vagrantfile后,使之生效(相当于先 halt,再 up) |
vagrant destroy | 彻底移除本地环境 |
vagrant box list | 显示当前已经添加的box列表 |
vagrant box remove | 删除相应的box |
vagrant package | 打包命令,可以把当前的运行的虚拟机环境进行打包 |
vagrant plugin | 用于安装卸载插件 |
vagrant status | 获取当前虚拟机的状态 |
vagrant global-status | 显示当前用户Vagrant的所有环境状态 |
Vagrant开源社区提供了许多已经打包好的操作系统,我们称之为box。
box下载地址
官方镜像:https://vagrantcloud.com/boxes/search
第三方仓库:http://www.vagrantbox.es/
1、建立自己的开发环境目录命令
$ mkdir centos
$ cd centos
2、导入box命令
$ vagrant box add {title} {url}
vagrant box add是添加box的命令,{title}是以后创建虚拟机的别名,{url}是下载到本地box的路径,也可以是服务器端的URL
将box镜像添加到本地仓库,有三种方式
1、使用http绝对地址
vagrant box add centos http://box.vagrant.com/centos.box
2、使用本地文件(从协议来说,和上面一样,相当于file:///协议的地址)
vagrant box add centos ./centos.box
3、使用仓库名称
vagrant box add centos centos/centos7
3、导入box命令
$ vagrant box add centos7 E:/vagrant/box/Vagrant-CentOS-7.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7' (v0) for provider:
box: Unpacking necessary files from: file:///E:/vagrant/box/Vagrant-CentOS-7.box
box:
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!
4、初始化命令
$ vagrant init centos7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
初始化成功后,vagrant会在当前的初始化目录生成一个Vagrantfile配置文件,我们可以修改它,进行个性化定制。
5、启动命令
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos_default_1549288806840_16331
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Connection reset. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
==> default: Rsyncing folder: /cygdrive/e/vagrant/centos/ => /vagrant
6、SSH连接安装的虚拟机命令
登录虚拟机的三种方式
1、在开发环境的目录(有Vagrantfile的地方),登录虚拟机
$ vagrant ssh
[vagrant@localhost ~]$
2、使用第三方工具,如secureCRT)或系统ssh命令进行登录,IP为Vagrantfile中指定的hostonly地址,用户名与密码默认都是vagrant
3、在宿主机的命令行,ssh到本地端口的方式登录。观察客户机的22端口映射到宿主机的是多少,一般是2222,用户名与密码默认都是vagrant
$ ssh -p 2222 127.0.0.1
7、打包分发命令
当你配置好开发环境后,退出并关闭虚拟机。在终端里,对虚拟机打包
# vagrant halt // 在开发环境的目录,关闭centos7
# vagrant status // 确认centos7关机
# vagrant package centos7 --output centos7.box --vagrantfile Vagrantfile
// --output NAME:(可选)设置通过NAME来指定输出的文件名;--vagrantfile FILE:(可选)将Vagrantfile直接封进box中
注:如果网络模式中使用private_network的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:rm -f /etc/udev/rule.d/70-persistent-net.rules
打包完成后会在当前目录生成一个centos7.box的文件,将这个文件分发给其他用户(开发者)。
其他用户只要添加这个 box ,并用其初始化自己的开发目录,就能得到一个一样的开发环境了。
$ vagrant box add centos7 centos7.box
//添加centos7.box,镜像命名为centos7
$ vagrant init centos7
// 初始化centos7镜像
$ vagrant up