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,請使用全局狀態命令和全局控件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM