vagrant学习笔记

zeweig 2015-06-29

想了解多主机是如何定义和使用的, 所以又学习了一遍vagrant

1. vagrant virtualbox 下载安装

https://www.vagrantup.com/downloads.html

https://www.virtualbox.org/wiki/Downloads

查看安装在命令行输入vagrant

2. 添加box

把box理解为系统的镜像文件,或者是虚拟机本身

cd ~/test

vagrant box list //查看box列表

找到想要的box 

https://atlas.hashicorp.com/boxes/search?utm_source=vagrantcloud.com&vagrantcloud=1

64位的很容易找到, 如果要找32位的, 这样搜索 centos 6.5 32

复制一下名字, chef/centos-6.5

在命令行安装, vagrant box add chef/centos-6.5

大小有几百M到几个G不一定, 如果觉得网速慢可以用下载工具下载下来, 然后进行vagrant box add 来安装, 本地安装需要使用--name参数

vagrant box add ~/Downloads/virtualbox.box --name sentos6.5

vagranb box list //现在就可以看到一个已经安装的box

3.初始化, 启动, 连接

cd ~/desktop

mkdir maxwelldu

cd maxwelldu

vagrant box list

vagrant init centos6.5   初始化

ls

vagrant up  启动

导入之前的box, 之前的box只会用到这一次, 以后box的修改只会影响当前的box

看到最后一行是共享目录的对应关系

vagrant ssh 连接, 默认会用vagrant用户来连接到box

windows用户下载putty, 然后连接127.0.0.1 端口为2222 用户 vagrant 密码也是 vagrant

4.启动, 停止, 重启, 销毁

vagrant status  查看状态

vagrant halt 停止

vagrant status

vagrant ssh

sudo yum install httpd

sudo service httpd status

sudo service httpd start

exit

vagrant suspend 将正在运行的内存存到硬盘上, 下次启动的时候再恢复到上次的状态

vagrant status 

vagrant resume 或者 vagrant up 来恢复

vagrant ssh

sudo service httpd status 查看状态, 发现还是启动着的

exit

vagrant reload 重启, 先关机, 再启动

vagrant destory 不会删除之前添加的box, 只会删除当前的box, 如果希望完全删除某个已经初始化的vagrant  

5.共享的目录

vagrant init

vagrant up

vagrant ssh

cd /vagrant

在本地打开编辑器brackets, 打开目录 ~/Desktop/maxwelldu

在里面建立一个www目录, 再www里面新建一个index.html

写点内容

再回到vagrant

ls

ls www

cat www/index.html

6.配置共享目录

打开Vagrantfile, 这个文件是用ruby语言写的

找到synced_folder , 把前面的#去掉就打开了

config.vm.synced_folder "../data", "/vagrant_data"

"../data" 表示当前物理机上的当前目录上一级的data目录,  "/vagrant_data" 表示虚拟机上面的目录

  config.vm.synced_folder "../data", "/vagrant_data", create:true, owner:"root", group:"root"

  在后面添加一个create选项, 设置为true,默认只是flase.如果值为true,vagrant up的时候会帮你再主机里面创建这个要同步的目录, 后面表示将虚拟机上面目录的拥有者为root, 组也为root

vagrant_data的拥有者和组都是root

exit

vagrant reload

重启完了发现除了之前同步的目录之外, /vagrant_data也是一个同步的目录

vagrant ssh

cd /

ls -la  发现vagrant的用户和群组是vagrant, 下面有一个vagrant_data, 他的用户和群组都是root

7.网络配置

私有网络 private_network 为虚拟机手工的指定一个ip地址, 只能在自己机器上访问

公有网络 public_network 可以配置为在同一个网络的设备可以访问, 比如你的电脑是在一台路由器配置好的网络里面, 在这台网络里面的其他设备也可以访问到你的虚拟机 

端口转发 比如本地端口8080, 配置转发到虚拟机上的80端口, 这种不是很灵活, 使用较少

8.私有网络

打开Vagrantfile

修改config.vm.network "private_network"

比如配置为: config.vm.network "private_network", ip: "192.168.33.22"

exit;

vagrant reload

ping 192.168.33.22

ctrl+c 停止, 没有出现timeout就说明能够ping通

vagrant ssh

ifconfig 

查看eth1 的网络地址就是我们手工设置的网络地址

9.公有网络

同一个网络的设备也可以访问的话, 打开Vagrantfile的文件, 把私有网络的配置注释起来, 打开public_network

exit;

vagrant reload

如果是使用的wifi连接, 请选择1

vagrant ssh

ifconfig  查看eth1, 这个是在内网的ip地址, 复制这个ip地址, 打开新的命令窗口, 用ping检查一下, 可以在同一个网络的其他设备上面也ping一下, 应该也可以通信

ping 192.168.31.112

10.搭建一个Web服务器

sudo yum -y install httpd

sudo yum -y install vim

sudo vim /etc/httpd/conf/httpd.conf

G

i

打开以下行并修改内容如下

NameVirtualHost *:80

<VirtualHost *:80>

DocumentRoot /vagrant/www

</VirtualHost>

:wq

cat /vagrant/www/index.html

sudo service httpd start

ifconfig 查看一下ip地址

现在就可以在本地开发项目, 然后通过在虚拟机上配置好的环境来运行项目

192.168.31.112 在物理机访问, 发现访问不了, 报错信息,  httpd: apr_sockaddr_info_get() failed for MiWiFi-R1D

解决问题地址: http://www.metsky.com/archives/25.html

后面换成私有网络之后不能启动, 建议可以不要尝试公有网络

vagrant destroy 删除

rm Vagrantfile

vagrant init

vim Vagrantfile  打开私有网络

vagrant up

vagrant ssh

...

11.打包

vagrant ssh

sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules  //打包前的准备

exit

vagrant package

vagrant box add 打包好的box目录

vagrant box list

vagrant init 新添加的box名称

后面可以将这个box传给其他队友使用

12.多主机

在本地配置多台服务器, 可能多台web服务器, 数据库服务器, 每台服务器都可以有独立的配置, ip地址, 

多主机就是解决怎么样将本地开发的网站与正常的服务器环境同步

13.定义多主机

cd ~/Desktop/maxwelldu/projects

mkdir workflow-project

cd workflow-project

vagrant box list

vagrant init sentos6.5

open .

编辑Vagrantfile

在config.vm.box 下面定义两台主机

config.vm.define "development" do |development|

end

config.vm.define "production" do |production|

end

这样就定义好了两台主机

vagrant status

看到两台是没有创建

vagrant up 默认会启动所有的主机, 如果只想启动某一台, 后面跟上名字就行

vagrant ssh development 连接到development机器, 现在两台机器都启动了, 不过还不能互相通信

control+t

vagrant ssh production

14. 多主机的网络设置

如果多台主机是同样的配置则可以写在定义的主机之外, 在config.vm.box = "sentos6.5" 下面写

前面介绍了公有网络和私有网络, 私有网络的好处是不需要组织一个局域网

我们现在单独给两台主机配置一下私有网络

配置如下

  config.vm.define "development" do |development|

      development.vm.network "private_network", ip:"192.168.33.11"

  end

  config.vm.define "production" do |production|

      production.vm.network "private_network", ip:"192.168.33.22"

  end  

exit

vagrant reload 不指定会重启Vagrantfile下定义的所有的主机

vagrant ssh

ifconfig 

在11的主机上面ping 22

在22的主机上面ping 11 检查是否能够正常通信

15.多主机的主机名

Hostname 是一个用来设置或显示当前主机,域或者系统的节点名的程序.许多联网程序使用这些名字来标识机器.NIS/YP同样也使用域名.

现在两台主机的主机名都是localhost

vagrant ssh development

hostname 查看主机名

vim /etc/sysconfig/network 下面去修改, 或者在Vagrantfile里面去配置, 当启动以后,vagrant会自动的设置主机名

配置如下:

  config.vm.define "development" do |development|

      development.vm.network "private_network", ip:"192.168.33.11"

      development.vm.hostname = "maxwelldu-dev"

  end

  config.vm.define "production" do |production|

      production.vm.network "private_network", ip:"192.168.33.22"

      production.vm.hostname = "maxwelldu-prod"

  end  

vagrant reload

vagrant ssh development

hostname 查看发现是我们配置的

vagrant ssh production

hostname

cat /etc/sysconfig/network  可以看到HOSTNAME后面的值就是主机名, 可以直接修改这个值, 修改完了 service network restart就可以生效

16.多主机的共享目录

现在这两台主机都会有共同的同步目录, 也就是默认的都会使用项目的目录, 现在可以单独为第一台主机配置一个目录

mkdir development

mkdir production

设置同步的目录

vim Vagrantfile

配置如下:

  config.vm.define "development" do |development|

      development.vm.network "private_network", ip:"192.168.33.30"

      development.vm.hostname = "maxwelldu-dev"

      development.vm.synced_folder "development", "/vagrant", create:true

  end

  config.vm.define "production" do |production|

      production.vm.network "private_network", ip:"192.168.33.31"

      production.vm.hostname = "maxwelldu-prod"

      production.vm.synced_folder "production", "/vagrant", create:true

  end  

学习和参考地址:

http://ninghao.net/video/1570

http://ju.outofmemory.cn/entry/101490

http://my.oschina.net/jingxing05/blog/158267

http://www.douban.com/note/322249262/

相关推荐