運行環境
* Windows 10 家庭版,版本 1703, OS 版本 15063.413, 64位
* Oracle VirtualBox 5.1.22
* vagrant 1.9.5
* 虛擬機系統 Ubuntu 16.04
* Git Bash (git version 2.13.0.windows.1)
0. 主要流程
Vagrant 操作虛擬機的流程主要有:
- 初始化 vagrant init
- 修改 Vagrantfile
- 登錄虛擬機并修改 Ubuntu 源
- 安裝和升級 Ubuntu 內的包
- 修改 ~/.bashrc 配置文件
- 重啟虛擬機 vagrant reload
1. 初始化 vagrant init
首先,需要新建一個目錄,并在該目錄中進行 vagrant 的初始化。以后該目錄就作為與虛擬機共享的目錄,達到效果是:在本機進行編程操作等,而在虛擬機環境中去運行。
具體操作:假設新建一個 bento 目錄(目錄名隨便取),并進入該目錄。
$ mkdir bento
$ cd bento
在 bento 目錄下進行 vagrant 初始化(initialize)。
$ vagrant init
初始化的結果就是在該目錄中得到一個 Vagrantfile。
2. 修改 Vagrantfile
現在需要把 virtual box 即 vagrant 虛擬機盒子加入 vagrant 的 box list 中,之后才能使用該虛擬機。
在盒子所在目錄下運行下面的命令。其中 vagrant box add
表示將盒子加入到 box list 中,
$ vagrant box add mybento mybento_ubuntu1604.box
加入后可以查看 box list 確認虛擬機盒子加入成功
$ vagrant box list
mybento (virtualbox, 0)
使用 Sublime、Atom 或者 VSCode 等編輯器打開 Vagrantfile編輯如下并保存。
主要有兩點需要注意:
-
config.vm.box = "mybento"
,表示使用 mybento 這個虛擬機盒子 -
config.vm.network "forwarded_port", guest: 8080, host: 8080, host_ip: "127.0.0.1"
端口轉發,guest 表示虛擬機的端口,host 表示主機的端口。這里是把虛擬機中 8080 端口轉發到主機的 8080 端口。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "mybento"
config.vm.network "forwarded_port", guest: 8080, host: 8080, host_ip: "127.0.0.1"
config.vm.network "forwarded_port", guest: 8888, host: 8888, host_ip: "127.0.0.1"
config.vm.network "forwarded_port", guest: 8000, host: 8000, host_ip: "127.0.0.1"
end
3. 登錄虛擬機并修改 Ubuntu 源
登錄之前需要設置 rsa 密鑰。參考 Vagrant 增加新 box 前需要建立 rsa 公鑰和私鑰。這一步的意義在于,某些在其他地方導出的 box,如果需要重新使用,就需要 rsa 密鑰設置,否則會卡在 vagrant up 中的 ssh 階段。
登錄虛擬機
$ vagrant ssh
根據 Ubuntu 16.04 Xenial 阿里云源 把 Ubuntu 的源更改為阿里云,以后安裝升級包等內容時,速度就比默認的源快很多。
4. 安裝和升級 Ubuntu 內的包
再更改 Ubuntu 的源以后。
首先,刷新 Ubuntu 源的包清單。(注意這里是 update)
$ sudo apt-get update
然后,升級 Ubuntu 現有的包。(注意是 upgrade)
$ sudo apt-get -y upgrade
升級需要花費一些時間。升級以后,整個虛擬機盒子大小會從 400MB+ 增加到 1G 以上。不升級的后果是使用 Python 的過程中會出現一些問題,雖然可以使用 pyenv,但是仍然推薦升級。
另外,也可以把 python3 的開發包、sqlite、pip 以及 python 虛擬環境包 virtualwrapper 一起安裝好。
$ sudo apt-get install -y python3-dev sqlite python-pip
$ sudo pip install --upgrade pip
$ sudo pip install virtualenvwrapper
5. 修改 ~/.bashrc 配置文件
在虛擬機中進入 .bashrc
文件,配置環境變量。vim
是編輯器,進去以后編輯按小寫的 i
,編輯完成以后按 ESC,然后輸入 :wp
保存退出。
$ vim ~/.bashrc
在.bashrc
末尾增加:
WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
PROJECT_HOME=/vagrant
其中:
WORKON_HOME=~/.virtualenvs
表示 python 虛擬環境都放在 ~/.virtualenvs
下,這個參數是 python 的虛擬環境管理包 virtualenvwrapper 將使用。
source /usr/local/bin/virtualenvwrapper.sh
表示把 virtualenvwrapper 加到環境變量中。
PROJECT_HOME=/vagrant
是把主機中 Vagrantfile 所在目錄,與虛擬機中 /vagrant
目錄進行了共享(虛擬機中進入使用 cd /vagrant
命令)。這樣在主機中也可以操作虛擬機的文件,便于本地開發。
最后保存該配置文件并退出。
6. 重啟虛擬機 vagrant reload
退出虛擬機使用 exit
命令就可以推出到
$ exit
然后在主機的終端中,在 Vagrantfile 所在目錄下,重啟虛擬機
$ vagrant reload
最近可以再次登錄,就可以正常使用 Vagrant 創立的 Ubuntu 16.04 虛擬環境。
$ vagrant ssh