使用Vagrant創建CentOS虛擬機
Vagrant是一款由HashiCorp公司提供的,用於快速構建虛擬機環境的軟件。本節我們將使用Vagrant結合Oracle VM VirtualBox快速地在win10環境下構建CentOS7虛擬機。在此之前需要先安裝好 Vagrant 和 VirtualBox。
構建CentOS7虛擬機
- 在https://app.vagrantup.com/boxes/search下搜索centos:
- 在win10任意盤符下創建 vagrant_vm 目錄(注意目錄最好不要有中文和空格),然後在該目錄下使用cmd執行命令:
vagrant init centos/7
- 執行 vagrant up 啓動(這時候最好提前打開VirtualBox),然後會出現以下界面,一直等待完成後即可,在完成後,會在 VirtualBox 的列表裏會出現一臺正在運行的虛擬機:
- 在上面的安裝過程中我們會發現,過程非常的緩慢,我們可以用以下的方式加速:
在上面的日誌中可以找到這麼一行:
Downloading: https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box
後面這個URL就是下載地址了,將它黏貼到迅雷等下載工具下載即可。然後將下載好後的xxx.box文件複製到 vagrant_vm 目錄下,並且重命名爲 centos7.box(刪除centos7.box之外的文件和目錄,只保留centos7.box一個文件)
接着在vagrant_vm下運行命令,導入已存在的鏡像(box文件):
vagrant box add centos/7 centos7.box
初始化box,接着執行命令:
// 注意此處的名稱和上方保持一致
vagrant init centos/7
初始化成功後執行命令啓動:
vagrant up
構建成功,效果和一開始在線下載構建是一樣的。
常見的幾個vagrant命令
- vagrant status
查看虛擬機狀態信息
- vagrant halt
關閉已經啓動的虛擬機
- vagrant up
啓動虛擬機
- vagrant suspend
暫停虛擬機,會保存暫停之前的狀態
- vagrant resume
恢復暫停之後的虛擬機
- vagrant reload
重新啓動虛擬機
- vagrant destroy
銷燬已經創建的虛擬機
- vagrant ssh
命令行的模式鏈接虛擬機
遠程工具連接虛擬機
在使用 vagrant ssh 的實際操作中發現,可能會出現如下的錯誤:
在 Google上找了很多方法,說是 private key 文件的權限問題,但是都沒有解決,後面直接使用ssh連接工具連接成功,具體的操作如下圖:
1. 先普通用戶登陸
2. 配置root用戶登陸
使用 vagrant 用戶登陸成功後,可以使用下方命令切換到root用戶
su root
// 密碼
vagrant
但是這樣還是不能直接使用root用戶登陸,需要以下的操作:
首先以默認身份登錄,切換到root用戶後,並修改 sshd 配置文件:
vim /etc/ssh/sshd_config
做如下變動
# PermitRootLogin prohibit-password
PermitRootLogin yes # 允許 root 身份登錄
# PasswordAuthentication on
PasswordAuthentication yes # 可以使用密碼登錄
重啓 sshd 服務
systemctl restart sshd
然後使用 vagrant reload 命令直接重啓虛擬機,這時我們就可以直接使用 root/vagrant 登陸了。
目錄共享
Vagrant的根目錄(就是我們一開始創建的vagrant_vm)和虛擬機裏的/vagrant目錄是共享的。當我們在 vagrant_vm 新建一個文件時,在虛擬機/vagrant的目錄也有同樣的內容
自定義共享
- 共享目錄配置
config.vm.synced_folder
"your_folder"(必須) //物理機目錄,可以是絕對地址或相對地址,相對地址是指相對與vagrant配置文件所在目錄
,"vm_folder(必須)" // 掛載到虛擬機上的目錄地址
,create(boolean)--可選 //默認爲false,若配置爲true,掛載到虛擬機上的目錄若不存在則自動創建
,disabled(boolean):--可選 //默認爲false,若爲true,則禁用該項掛載
,owner(string):'www'--可選 //虛擬機系統下文件所有者(確保系統下有該用戶,否則會報錯),默認爲vagrant
,group(string):'www'--可選 //虛擬機系統下文件所有組( (確保系統下有該用戶組,否則會報錯),默認爲vagrant
,mount_options(array):["dmode=775","fmode=664"]--可選 //dmode配置目錄權限,fmode配置文件權限 默認權限777
,type(string):--可選 //指定文件共享方式,例如:'nfs',vagrant默認根據系統環境選擇最佳的文件共享方式
- 安裝vbguest插件
爲防止掛載失敗,提示如下圖 because the filesystem "vboxsf" is not available 的問題,提前執行該命令安裝插件
安裝如下的插件即可解決:
vagrant plugin install vagrant-vbguest
關閉更新和下載
config.vbguest.auto_update = false #防止重新安裝更新
config.vbguest.no_remote = true #不從遠程web端下載
- 掛載共享目錄
編輯vagrant_vm文件夾下的Vagrantfile文件:
在這行下面添加如下配置:
config.vm.synced_folder ".","/vagrant",disabled:true # 禁用vagrant的默認共享目錄,不然有可能掛載失敗
config.vm.synced_folder "./data", "/vagrant_data", create:true, owner: "root", group: "root"
配置的意思是將當前路徑下的data文件夾和虛擬機的/vagrant_data,擁有者爲root,羣組爲root,如果路徑不存在則創建。
修改了Vagrantfile文件需要執行 vagrant reload 重啓。重啓後我們在data文件夾下新建一個 test.txt 文件,然後連接虛擬機看看是否共享成功
然後再次重啓,連接虛擬機去查看/vagrant_data目錄下是否共享成功
網絡配置
虛擬機私有網絡
在 Vagrantfile 中開啓網絡的配置信息:
然後使用命令vagrant reload重啓虛擬機,重啓後我們使用ping命令看是否可以在windows上訪問到這個ip:
連接虛擬機,使用 ip addr 查看其IP:
虛擬機公有網絡
編輯Vagrantfile,將我們剛剛開啓的私有網絡配置註釋,然後開啓下面這行配置:
然後重啓虛擬機,重啓過程中會讓你根據當前網絡環境選擇:
此處顯示我的網絡適配器的選項是 2,所以此處我輸入了 2,重啓好後連接虛擬機,查看其IP:
公有網絡和私有網絡的區別是,公有網絡是無線路由器自動分配的IP地址,並且在同一個wifi網絡下的其他設備也是可以訪問這個IP地址的。