Vagrant 基本設定

    如何管理 Vagrant boxes?

    下載完成後,檢查一下目前所有安裝在本機的 Vagrant boxes:

    1. $ vagrant box list
    2. bento/debian-8.6 (virtualbox, 2.3.0)
    3. bento/ubuntu-14.04 (virtualbox, 201708.22.0)

    同理,如果要移除不再需要的 box,可以使用 vagrant box remove <box_name>

    1. $ vagrant box remove bento/debian-8.6

    透過 Vagrantfile 配置測試環境

    還記得在上一個章節內我們在初始化 Vagrant 時系統自動產生的 Vagrantfile 嗎?現在把這個檔案打開,你應該會看到以下結果:

    1. # -*- mode: ruby -*-
    2. # vi: set ft=ruby :
    3. # All Vagrant configuration is done below. The "2" in Vagrant.configure
    4. # configures the configuration version (we support older styles for
    5. # backwards compatibility). Please don't change it unless you know what
    6. # you're doing.
    7. Vagrant.configure("2") do |config|
    8. # The most common configuration options are documented and commented below.
    9. # For a complete reference, please see the online documentation at
    10. # https://docs.vagrantup.com.
    11. # Every Vagrant development environment requires a box. You can search for
    12. # boxes at https://vagrantcloud.com/search.
    13. config.vm.box = "bento/ubuntu-14.04"
    14. # Disable automatic box update checking. If you disable this, then
    15. # boxes will only be checked for updates when the user runs
    16. # `vagrant box outdated`. This is not recommended.
    17. # config.vm.box_check_update = false
    18. # Create a forwarded port mapping which allows access to a specific port
    19. # accessing "localhost:8080" will access port 80 on the guest machine.
    20. # config.vm.network "forwarded_port", guest: 80, host: 8080
    21. # Create a forwarded port mapping which allows access to a specific port
    22. # within the machine from a port on the host machine and only allow access
    23. # via 127.0.0.1 to disable public access
    24. # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
    25. # Create a private network, which allows host-only access to the machine
    26. # using a specific IP.
    27. # config.vm.network "private_network", ip: "192.168.33.10"
    28. # Create a public network, which generally matched to bridged network.
    29. # Bridged networks make the machine appear as another physical device on
    30. # your network.
    31. # config.vm.network "public_network"
    32. # Share an additional folder to the guest VM. The first argument is
    33. # the path on the host to the actual folder. The second argument is
    34. # the path on the guest to mount the folder. And the optional third
    35. # argument is a set of non-required options.
    36. # config.vm.synced_folder "../data", "/vagrant_data"
    37. # Provider-specific configuration so you can fine-tune various
    38. # backing providers for Vagrant. These expose provider-specific options.
    39. # Example for VirtualBox:
    40. #
    41. # config.vm.provider "virtualbox" do |vb|
    42. # # Display the VirtualBox GUI when booting the machine
    43. #
    44. # # Customize the amount of memory on the VM:
    45. # vb.memory = "1024"
    46. #
    47. # View the documentation for the provider you are using for more
    48. # information on available options.
    49. # Enable provisioning with a shell script. Additional provisioners such as
    50. # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
    51. # documentation for more information about their specific syntax and use.
    52. # config.vm.provision "shell", inline: <<-SHELL
    53. # apt-get update
    54. # apt-get install -y apache2
    55. # SHELL
    56. end

    簡單來說,Vagrantfile 就是每一台的虛擬機的規格表。雖然乍看之下這個檔案長得有些驚悚,但仔細研究後會發現目前真正有用到的配置其實只有以下短短幾行而已:

    1. Vagrant.configure("2") do |config|
    2. config.vm.box = "bento/ubuntu-14.04"
    3. end

    如何管理 Vagrant 虛擬機?

    首先,我們可以使用 vagrant status 來確認當前 Vagrant 主機的運作狀況:

    我們可以清楚發現雖然虛擬機已經成功運行,但主機名稱顯示為 default。這種模糊的名稱在管理主機數量多起來後常常會造成開發者的困擾。為了避免混淆,我們可以先用 vagrant halt 將目前的虛擬機暫停或是使用 vagrant destroy 直接摧毀。接下來,在 Vagrantfile 中加入下列設置來替我們的虛擬機命名:

    1. config.vm.define "server"
    1. $ vagrant up
    2. $ vagrant status
    3. Current machine states:
    4. server running (virtualbox)
    5. The VM is running. To stop this VM, you can run `vagrant halt` to
    6. shut it down forcefully, or you can run `vagrant suspend` to simply

    將虛擬器命名除了方便我們在開發時清楚了解每個虛擬主機的功用,在未來我們也可以直接透過每個主機的別名進行操作。