1. 程式人生 > >vagrant特性——基於docker開發環境(docker和vagrant的結合)-1-基本使用

vagrant特性——基於docker開發環境(docker和vagrant的結合)-1-基本使用

Docker

vagrant提供了使用Docker作為provider(其他的provider有virtualBox、VMware\hyper-V等)的開箱即用支援。這允許你的開發環境由Docker容器而不是虛擬機器支援。此外,它為開發dockerfile提供了一個良好的工作流。

Docker Basic Usage 基本使用

在vagrant中的Docker provider表現得就像其他的provider一樣。如果你已經熟悉vagrant,那麼使用Docker provider應該是直觀和簡單的。
Docker provider不需要config.vm.box設定。由於Docker容器的“基本映象”是從Docker索引中提取的,或者是在Dockerfile中構建的,所以該box不會增加太多的值,對於該provider config.vm.box值的設定是可選的。

 

Docker Images 映象

vagrant可以使用的第一個方法是通過映象來獲取Docker容器。此映象可以來自任何Docker登錄檔。一個例子如下:

Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    d.image = "ubuntu:14.04" //映象名稱
  end
end

當執行vagrant up --provider=docker命令時,其將啟動映象ubuntu:14.04。
這對於應用程式可能依賴的其他元件非常有用:資料庫、佇列等。通常,你正在使用的主要應用程式是用Dockerfile構建的,或者通過SSH的容器構建的。

 

Dockerfiles

vagrant還可以基於本地Dockerfile自動構建和執行映象。這對於在本地迭代構建到映象中的應用程式非常有用。一個例子如下:

Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    d.build_dir = "." //dockerfile檔案在Vagrantfile檔案所在的當前目錄下
  end
end

上面的配置將在與Vagrantfile相同的目錄中查詢Dockerfile。當vagrant up --provider=docker 命令執行時,vagrant會自動構建那個Dockerfile並基於那個Dockerfile啟動一個容器。
在呼叫vagrant reload 命令時會重新構建Dockerfile。

 

Synced Folders and Networking同步資料夾和網路

使用Docker時,Vagrant會自動將同步資料夾和網路選項轉換為Docker資料卷和轉發埠。你不必使用特定於docker的配置來完成此工作。這有助於保持你的Vagrantfile與它一直以來的樣子相似。
Docker provider不支援為與Docker容器同步的資料夾的所有者或組指定選項。
目前不支援私有和公共網路。


Volume Consistency 資料卷的一致性

在定義同步資料夾時,可以使用docker_consistency選項指定Docker的卷一致性設定。這可以大大提高macOS上的效能。一個例子顯示使用快取和委託設定:

config.vm.synced_folder "/host/dir1", "/guest/dir1", docker_consistency: "cached"
config.vm.synced_folder "/host/dir2", "/guest/dir2", docker_consistency: "delegated"

 

Host VM 主機虛擬機器

如果系統不能本地執行Linux容器,vagrant會自動啟動一個“主機VM”來執行Docker。這允許基於docker的vagrant環境保持可移植性,而不會因平臺的不同而出現不一致。
vagrant將旋轉主機VM的一個例項,並在這個VM上執行多個容器。這意味著使用Docker provider,你只有一個虛擬機器的開銷,而且只有在絕對必要的情況下才有。
預設情況下,Vagrant啟動的主機VM是被boot2docker支援的,因為它啟動速度快,使用的資源少。但是主機VM可以定製為指向任何Vagrantfile檔案。這允許主機VM通過執行Ubuntu、RHEL等的VM去更接近於生產。它可以執行由Vagrant支援的任何作業系統。

⚠️注意:vagrant將嘗試使用“最好”的同步資料夾實現。對於boot2docker,這通常是rsync。在這種情況下,請確保在主機上安裝了rsync。如果不是,vagrant會返回給你一個人性化的錯誤資訊。

下面顯示了一個更改主機VM的示例。請記住,這是可選的,如果沒有指定,vagrant將啟動一個預設主機VM:

Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    d.vagrant_vagrantfile = "../path/to/Vagrantfile"
  end
end

主機VM將在provider是Docker的第一個位置上啟動。要控制此主機VM,請使用全域性狀態命令和全域性控制元件。