vagrant 的介紹與使用

什麼是vargrant?

vagrant是一個構件虛擬開發環境的工具。他用於創建部署虛擬的開發環境;

白話:使用vagrant來創建和管理虛擬機的,而裝虛擬機的文件由運維組對開發環境做的一個box的鏡像。 

這樣做的目的,省去了我們搭建開發環境,直接裝一個虛擬機,把正在使用的開發環境的鏡像還原進去。 

當然使用vagrant最主要解決的一個問題就是,讓開發環境同步。“代碼在我機子上運行沒有問題”這種說辭將成爲歷史。

看下圖,其中,第一種是直接在物理機上裝 Hypervisor,然後再該層上安裝我們自己的虛擬機,第二種是先在物理機上裝任意一個操作系統,然後在此基礎上安裝 Hypervisor,再然後再該層上安裝我們自己的虛擬機,我們大部分用 Vmware 都是第二種,Vagrant就是第一種,微軟自帶的hyper-v ;

 

vagrant 的構成

  • base box:vagrant使用的基礎鏡像文件,可以理解爲Vagrant中使用的Linux的鏡像文件;
  • providers:鏡像文件安裝在哪個虛擬機上,vagrant 必須依賴於 Provide,Provide有:vmware、virtualbox、hyper-v,其中,vmware是收費,vartualbox是免費,推薦、hyper-v是微軟自帶的;
  • provisioners  啓動時、啓動後,去執行一些shell腳本(如配置網絡、安裝軟件環境等)

 

Vagrant 和 Docker 有什麼區別?

Vagrant 對應的是VM層面的,而Docker對應的是Container

 

vagrant安裝

1、安裝 providers,你有兩種選擇,vritualbox 和 hyper-v,如果你是window10及以上系統,那麼建議使用hyper-v,否則請您使用 vartualbox

  如果是用微軟自帶的hyper-v,則你需要看:https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/

  如果你是用virtualBox,則你需要安裝它,https://www.virtualbox.org/wiki/Downloads;vmware因爲收費不推薦;

2、安裝vagrant,https://www.vagrantup.com/downloads.html

檢查是否成功安裝:vagrant --version

 

通過vagrant安裝box鏡像

離線方式(強烈推薦)

1、下載box文件

vagrant部署環境時,需要一個box文件。如果是在公司裏面,可以從他們那裏拷一個box文件安裝。這樣安裝的環境與他們是一致的。即模擬了一個開發環境。box文件也可以在網上下載。如:

在 http://www.vagrantbox.es/  或 https://app.vagrantup.com/boxes/search 上找到適合你自己的box,然後將box文件下載下來;

 

2、把box文件添加到虛擬機

新建一個目錄,將下載好的box鏡像文件丟入裏面,在裏面用poershell運行(需要管理員身份運行):

//添加box鏡像文件到虛擬機中
vagrant box add centosMix CentOS-7.1.1503-x86_64-netboot.box --provider=[hyperv|vertualbox]

 或者你也可以不用下載下來,而是通過:

vagrant box add centosMix https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box 

 

 

3、初始化虛擬機box文件

# centosMix 是上面命令中我們自定義的虛擬機名稱
vagrant init centosMix

執行完上面的命令之後,可以在目錄下看到一個已經生成的vagrantFile文件。這是一個配置文件,裏面包含該虛擬機的一些配置信息,其實就幾行而已,你可以去掉註釋後看到。 

 

4、啓動虛擬機

vagrant up --provider=hyperv --color      # 注意,安裝到hyper上而不是virtualbox中
如果是 用virtualbox虛擬機的話,就寫成:
vagrant up --provider=virtualbox --color

 注意輸出的信息,一般的,virtualbox的ip爲127.0.0.1 端口爲2222,而hyperv的ip爲其顯示的ip,端口是22;

 判斷是否成功安裝:vagrant status

 

進行完上面步驟後,就可以像使用服務器一樣,遠程到虛擬機了。可以使用的工具有xshell工具,winscp等工具。

初始安裝的時候後,遠程的時候,使用的IP是127.0.0.1 端口號是2222(看輸出信息知道的)。這些信息可以後續在進行設置。如果嫌麻煩,也可以修改vagrantFile文件之後,在進行安裝。默認中的賬號密碼都爲:vagrant

 

在線方式(國內用戶不推薦)

 

常用命令

vagrant up

啓動或創建(第一次)虛擬機

vagrant stauts

檢查虛擬機狀態

vagrant ssh <name>

通過ssh連接

 

vagrant ssh-config

查看ssh配置信息

 

vagrant suspend/resume/reload/hat <name>

暫停suspend / 重啓resume、重載reload、停止halt(停止的虛擬機需要 up 啓動)

vagrant destroy <name>

刪除/移除 虛擬機

vagrant destroy -f       強制刪除所有虛擬機

 

已經刪除的虛擬機,其所在的目錄中的 .vagrant 也最好刪除掉;

.vagrant 的目錄結構

> tree /F
D:.
│  Vagrantfile
│
└─.vagrant
    ├─machines        虛擬機目錄
    │  └─default         我們創建的虛擬機名稱,默認爲default
    │      └─hyperv          我們default虛擬機provider,爲 hyperv,即:default虛擬機是通過 hyperv 創建的
    │          │  action_configure
    │          │  action_provision
    │          │  action_set_name
    │          │  box_meta
    │          │  creator_uid
    │          │  id
    │          │  index_uuid
    │          │  private_key            ssh的登陸密鑰key
    │          │  synced_folders
    │          │  vagrant_cwd
    │          │
    │          └─Virtual Hard Disks       虛擬機的磁盤文件
    │                  generic-ubuntu2004-hyperv.vhdx
    │
    └─rgloader
            loader.rb

 

Box 文件目錄在哪兒?

一般在 用戶目錄下的 .vagrant.d 目錄中:

C:\Users\用戶名\.vagrant.d\

 

C:\Users\用戶名\.vagrant.d>tree /F
C:.
│  insecure_private_key
│  setup_version
│
├─boxes             // box就存放在這裏
│  ├─hyperv
│  │  └─0
│  │      └─hyperv
│  │          │  info.json
│  │          │  metadata.json
│  │          │  Vagrantfile
│  │          │
│  │          ├─Virtual Hard Disks
│  │          │      generic-ubuntu2004-hyperv.vhdx
│  │          │
│  │          └─Virtual Machines
│  │                  box.xml
│  │                  D90B1531-23A2-4D41-957F-8593E9356E69.vmcx
│  │                  D90B1531-23A2-4D41-957F-8593E9356E69.vmgs
│  │                  D90B1531-23A2-4D41-957F-8593E9356E69.VMRS
│  │
│  └─ubuntu
│      └─0
│          └─hyperv
│              │  info.json
│              │  metadata.json
│              │  Vagrantfile
│              │
│              ├─Virtual Hard Disks
│              │      generic-ubuntu2004-hyperv.vhdx
│              │
│              └─Virtual Machines
│                      box.xml
│                      D90B1531-23A2-4D41-957F-8593E9356E69.vmcx
│                      D90B1531-23A2-4D41-957F-8593E9356E69.vmgs
│                      D90B1531-23A2-4D41-957F-8593E9356E69.VMRS
│
├─data
│  │  checkpoint_cache
│  │  checkpoint_signature
│  │  lock.dotlock.lock
│  │
│  └─machine-index
│          index
│          index.lock
│
├─gems
│  └─2.7.4
├─rgloader
│      loader.rb
│
└─tmp
        boxe1394d60c23f1a8b64cfb37d8591b8a521b31cdf

 

 

vagrantfile文件的寫法

 

box的名稱爲 centos/7

安裝後設置其hostname爲vagrant-demo

 

安裝的box版本爲1905.1(注意:如果本地不存在該版本,會從網上拉取下來)

每次配置 vagrantfile 好後,需要重新創建vagrant;

更多配置前往:https://www.vagrantup.com/docs/vagrantfile 查看

 

vagrant的ssh連接

我們可以在 vagrantfile 目錄下使用命令 vagrant ssh 來登陸我們的虛擬機而不需要輸入用戶名和密碼,這是爲什麼?

執行vagrant ssh 命令後,vagrant會找 當前目錄的.vagrant目錄中的private.key文件,來登陸對應的虛擬機;注意:public.key 在創建linux時被注入到linux中了;

你也可以通過 vagrant ssh-config 來查看當前所在的虛擬機的信息;

 

有些時候,我們需要通過用戶名密碼來登陸虛擬機中,而vagrant在安裝虛擬機時應將使用密碼來登陸的功能禁用了,vagrant的本意就是建議我們最好通過private_key來登陸虛擬機,但是我們就像用密碼,如何設置?

1、先用 vagrant ssh 登陸我們的虛擬機中(也就是先用 private_key 登陸我們的虛擬機)

2、在虛擬機中的 /etc/ssh/sshd_config 中,將 PermitRootLogin由no改爲yes,保存

3、重啓sshd服務:sudo service sshd restart

4、完畢,你可以退出,然後使用賬號密碼(都爲vagrant)登陸到虛擬機了;

但是,我們還是建議你在生產環境中使用private_key來登陸到虛擬機中;

 

使用ssh的技巧(推薦設置)

我們輸入 vagrant ssh-config 命令,輸出的內容是可以被我們的ssh所使用的,也就是說,在任何目錄中都能夠快速的登陸到我們虛擬機中,而不需要先進入到 vagrantfile 目錄中;

 

在  C:\Users\用戶名\.ssh\ 目錄中,新建一個 config 文件(如果不存在,注意沒有文件名後綴),將上面紅色框起來的內容複製到 config 文件中,修改 第一行 Host default,default 可以改爲你熟悉的名字,比如這裏是 hlinux;

這樣,你就可以在任何目錄中使用  ssh hlinux 來直接登錄到虛擬機中了;

注意:hyper-v 新建的虛擬機的ip地址是不固定的,可能會在你重啓電腦的時候變動,這時候使用 ssh hlinux 就無法登陸到虛擬機了,記得改ip即可;

 

insecure_private_key

所有創建出來的虛擬機,都可以使用 insecure_private_key 來連接到虛擬機中(vagrant在安裝虛擬機的時候創建一個public_key安裝在虛擬機中,對應的private_key就是:insecure_private_key  了);

insecure_private_key文件 存在哪裏?

C:\Users\用戶名\.vagrant.d\ 下

但是,我們並現在並不能通過 insecure_private_key 來連接到虛擬機,因爲在你安裝虛擬機時,vagrant會自己生成一個 一對private_key 和 public_key,public_key 注入到虛擬機,private_key 替換 insecure_private_key 了,如下圖:

每臺虛擬機目錄中都有自己的 private_key文件:

而我想要的是以後所有創建出來的虛擬機都是用統一的 insecure_private_key 來登錄,如何做?要想禁止 vagrant 去生成每個虛擬機自己的 key,就想是用 insecure_private_key,可以在每個 vagrantfile 中添加一句話:

這樣,每次通過這個 vagrantfile 來生成虛擬機時,都不會生成自己獨有的 key,而是使用統一使用 insecure_private_key 文件來登錄到虛擬機中;

 

上圖中已經沒有 生成替換使用自己的key的信息了;

 

insecure_private_key 對應的 public_key 在虛擬中哪裏呢?/home/vagrant/.ssh/authorized_keys,如下圖:

 

 

一個vagrantfile創建多臺虛擬機並對每個虛擬機單獨設置

 

 

上圖中配置了需要創建了兩臺虛擬機,第一臺名爲 web,且設置hostname和box_version,第二臺名爲 db,只設置了hostname,box_version將會使用全局的 1905.1 這個版本;

 

使用循環來設置多臺虛擬機(更加靈活)

 

 

hyper-v 同步文件夾

 

宿主機的Vagrantfile所在的當前目錄同步到虛擬機中的 /vagrant 目錄中,同步的類型爲smb

下面代碼,是適配了 用 virtualbox 和 hyperv 兩種provider的文件同步:

 

vagrant box 的操作(重要)

vagrant box 的存放是在:C:\Users\用戶名\.vagrant.d\ 下的;

命令:

 

vagrant box list     列出所有已經安裝的box

vagrant box add centos/7    下載 centos/7 這個box

vagrant box remove centos/7 [--provider=hyperv]   刪除centos/7這個box

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章