zoukankan      html  css  js  c++  java
  • Vagrant基础简要记录

    Vagrant是一种开源软件,它为跨众多操作系统构建可重复的开发环境提供了一种方法。Vagrant使用提供者(provider)来启动隔离的虚拟环境。默认的提供者是Virtualbox

    Vagrant ( http://www.vagrantup.com/ ) is a powerful development tool, which

    lets you manage and support the virtualization of your development environment.

    Instead of running all your projects locally on your own computer, having to juggle

    the different requirements and dependencies of each project, Vagrant lets you run

    each project in its own dedicated virtual environment.

    Vagrant uses Providers to integrate with the third-party virtualization software,

    which provides the virtualized machines for our development environment. The

    default provider is for Oracle's VirtualBox however, there are providers to work

    with Amazon Web Services and VMware Fusion. The entire configuration is stored

    in simple plain text files. The Vagrant configuration (Vagrantfile), Puppet, and Chef

    manifests are simply written in text files in a Ruby Domain Specific Language. This

    means we can easily share the configurations and projects with colleagues, using

    Version Control Systems such as Git or Subversion.

    Docker vs Vagrant

    http://stackoverflow.com/questions/16647069/should-i-use-vagrant-or-docker-for-creating-an-isolated-environment

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

    vagrant可以帮助用户管理/部署虚拟机的程序。docker是一个帮助用户创建/运行/管理基于lxclinux container的程序。coreos是一个专门为运行linux container而设计的发行版。

    安装和使用

    https://atlas.hashicorp.com/boxes/search

    https://docs.vagrantup.com/v2/providers/ VMWare和Virtualbox等各种提供者

    Vagrant can be installed on Linux, Windows, and Mac OS X, and although it

    uses Ruby, the package includes an embedded Ruby interpreter. The only other

    requirement is a virtualization tool such as Oracle's VirtualBox. The Oracle's

    VirtualBox provider is available for free, and is included built-in with Vagrant

    https://www.virtualbox.org/

    http://downloads.vagrantup.com

    Each virtual machine starts with what Vagrant calls a base box. This is a specially

    packaged version of an operating system with some specific configurations in

    place. The number of configurations and packages installed on this packaged

    operating system is typically minimal (containing only a few tools which allow it

    to communicate with Vagrant).

    初始化

    Ubuntu的几个box

    Ubuntu10

    •  Lucid32 is available at  http://files.vagrantup.com/lucid32.box

    •  Lucid64 is available at  http://files.vagrantup.com/lucid64.box

    Ubuntu12

    •  Precise32 is available at  http://files.vagrantup.com/precise32.box

    •  Precise64 is available at  http://files.vagrantup.com/precise64.box

    Ubutnu14

    vagrant init ubuntu/trusty64; vagrant up --provider virtualbox

    vagrant init precise64 http://files.vagrantup.com/precise64.box

    Vagrantfile生成[ruby]

    vagrant init base64

    vagrant init

    vagrant box add <name> <url> [--provider provider] [--force]

    Powering up

     vagrant up

    Vagrant will then perform the following:

    •  Copy the base box

    •  Create a new virtual machine with the relevant provider (the default

    being VirtualBox)

    •  Forward any configured ports; by default, it will forward port 22 (SSH) on

    the VM to port 2222 on the host; this will allow us to connect to the VM

    •  Boot (power up) the VM

    •  Configure and enable networking, so that we can communicate with the VM

    •  Map shared folders between the host and the guest (by default, it will map

    the folder containing the Vagrant project to  /vagrant on the guest machine)

    •  Run any provisioning tools that are set up such as Puppet, Chef, or

    SSH provisioning

    vagrant suspend

    vagrant resume

    vagrant halt

    vagrant destroy

     vagrant ssh

    HOST机器共享

    Port forwarding

    Vagrantfile 文件中进行端口映射

    config.vm.network :forwarded_port, guest: 80, host: 8888

    Synced folders

    config.vm.synced_folder "/Users/michael/assets/" "/var/www/assets"

    The first parameter is the path to the folder on our machine, the second being the

    mount point on the VM.

    Networking

    config.vm.network :private_network, ip: "192.168.1.100"

    Auto-running commands

    config.vm.provision :shell, :inline => "sudo apt-get update"

    config.vm.provision :shell, :path => "provision.sh"  (the location of the

    script specified is relative to our project root, that is, /vagrant )

    Provisioning

    Puppet modules

    http://docs.puppetlabs.com/references/latest/type.html

    http://forge.puppetlabs.com/

    puppet apply --modulepath=/home/michael/provision/modules /home/michael/provision/manifests/default.pp

    独立运行模式

    config.vm.provision :puppet do |puppet|

    puppet.manifests_path = "provision/manifests"

    puppet.manifest_file = "default.pp"

    puppet.module_path = "provision/modules"

    end

    client/server模式

    config.vm.provision :puppet_server do |puppet|

    puppet.puppet_server = "puppet.internal.michaelpeacock.co.uk"

    puppet.puppet_node = "vm.internal.michaelpeacock.co.uk"

    end

    SSH

    config.vm.provision :shell, :path => "provision/setup.sh"

    config.vm.provision :shell, :inline => "apt-get install apache2"

    vagrant provision 命令可以重新进行provisioning

    multiple virtual machines

    Vagrantfile的配置

    # -*- mode: ruby -*-

    # vi: set ft=ruby :

    Vagrant.configure("2") do |config|

    config.vm.define :server1 do |server1|

    server1.vm.box = "precise64"

    server1.vm.network :private_network, ip: "10.11.1.100"

    end

    config.vm.define :server2 do |server2|

    server2.vm.box = "precise64"

    server2.vm.network :private_network, ip: "10.11.1.101"

    end

    end

    1. Power up the project ( vagrant up )

    2. Connect to  server1 ( vagrant ssh server1 )

    3. Ping  server2 from  server1 ( ping 10.11.1.101

    不同的配置

    # -*- mode: ruby -*-

    # vi: set ft=ruby :

    Vagrant.configure("2") do |config|

    config.vm.define :server1 do |server1|

    server1.vm.box = "precise64"

    server1.vm.network :private_network, ip: "10.11.1.100"

    server1.vm.provision :puppet do |puppet|

    puppet.manifests_path = "provision/manifests"

    puppet.manifest_file = "server1.pp"

    puppet.module_path = "provision/modules"

    end

    end

    config.vm.define :server2 do |server2|

    server2.vm.box = "precise64"

    server2.vm.network :private_network, ip: "10.11.1.101"

    server2.vm.provision :puppet do |puppet|

    puppet.manifests_path = "provision/manifests"

    puppet.manifest_file = "server2.pp"

    puppet.module_path = "provision/modules"

    end

    end

    end

    LAMP

    |-- provision

    | |-- manifests

    | | -- init.pp

    | -- modules

    -- Vagrantfile

    根下的Vagrantfile文件内容

    # -*- mode: ruby -*-

    # vi: set ft=ruby :

    Vagrant.configure("2") do |config|

      config.vm.provision :shell, :inline => "apt-get update"

      config.vm.box = "precise64"

      config.vm.network :forwarded_port, guest: 80, host: 8080

      config.vm.provision :puppet do |puppet|

        puppet.manifests_path = "provision/manifests"

        puppet.module_path = "provision/modules"

        puppet.manifest_file  = "default.pp"

      end

    end

    目录provision下是Puppet使用的各模块的安装和配置文件

    http://pan.baidu.com/s/1ntKFSVn#path=%252Fshare vagrant_lamp_stack.zip

    建立自己的Box

    1.安装VirtualBox虚拟机

    a) 网络需要设置为NAT

    b) 虚拟机名字:vagrant-ubuntu-raring

    c) hostname : vagrant-ubuntu-raring

    d) Domain:  vagrantup.com

    e) Root password:  vagrant

    f) Main account username:  vagrant

    g) Main account password:  vagrant

    h) install  openssh-server

    2.Install Guest Additions

    a) sudo apt-get install linux-headers-$(uname -r) build-essential

    b) sudo mount /dev/cdrom /media/cdrom

    c) sudo sh /media/cdrom/VBoxLinuxAdditions.run

    3.Vagrant authentication

    a) sudo groupadd admin

    b) sudo usermod -a -G admin vagrant

    4.vi sudo 修改

    a) %admin ALL=(ALL) NOPASSWD: ALL

    b) Defaults env_keep="SSH_AUTH_SOCK"

    c) #Default requiretty

    5.ssh无秘码登陆

    a) wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub o ~/.ssh/authorized_hosts

    b) chmod 0644 ~/.ssh/authorized_keys

    6.Provisioners

    a) sudo apt-get install puppet

    b) Chef

    1. sudo apt-get install ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential wget ssl-cert curl
    2. cd /tmp
    3. curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
    4. tar zxf rubygems-1.8.10.tgz
    5. cd rubygems-1.8.10
    6. sudo ruby setup.rb --no-format-executable
    7. sudo gem install chef --no-ri --no-rdoc

    7.Cleanup

    a) rm rf /tmp/*

    b) sudo apt-get clean

    8.Export

    a) vagrant package --base vagrant-ubuntu-raring

    b) website: http://docs.vagrantup.com/v2/cli/package.html

     

    测试自己的box

    $vagrant box add /../../my.box

    $vagrant init my

    $vagrant up

     

    如上的过程就可建立自己的box

    https://atlas.hashicorp.com/boxes/search 这里有很多开放的box

     

  • 相关阅读:
    SpringBoot的多环境配置及配置文件位置
    SpringBoot;yaml配置, JSR303校验
    springboot原理探寻,自动装配
    SpringBoot入门:搭建SpringBoot
    Android控件阴影库
    Android开发Utils工具类集合
    Android 实现顶部状态栏的沉浸模式(任意设置状态栏的颜色)
    推荐一个博客代码高亮插件
    H5+Css+js 做App UI 与原生的区别
    Android线程切换简便方法
  • 原文地址:https://www.cnblogs.com/2018/p/5636508.html
Copyright © 2011-2022 走看看