原文https://www.hashicorp.com/blog/feature-preview-docker-based-development-environments

Feature Preview: Docker-Based Development Environments

vagrant 1.6版本提供了一个新的内置provider:Docker。Docker提供者允许vagrant管理在容器中运行的开发环境,而不是在虚拟机中。这在Linux、Mac OS X和Windows上运行是不需要任何附加软件的。

在Vagrant中的Docker provider 使得你保持在Vagrant和Docker上使用的工作流程变得非常容易,同时还获得了vagrant的所有好处:跨平台的可移植性、同步文件夹、网络、预配置程序、vagrant共享、插件等等。

在本地不支持Linux容器的平台上,如Mac OS X和Windows, Vagrant会自动打开并共享一个代理虚拟机来运行Docker。这个代理VM是完全可定制的,并且Vagrant确保同步文件夹和网络工作如你所料。vagrant的用户不需要担心手动执行这些操作。

Docker, With Vagrant

Vagrant是为使用任何技术构建的应用程序管理开发环境的最佳方式。在许多情况下,虚拟机是最好的答案,所以vagrant已经使用虚拟机很多年了。但是,Vagrant并不完全与虚拟机绑定,在某些情况下,容器是最好的选择。Vagrant通过Docker provider使用Docker构建的Linux容器构建开发环境。

使用vagrant进行开发的Docker用户可以得到vagrant最出名的东西就是:vagrant工作流(可见本博客的vagrant之道(即其工作流程))。使用vagrant up命令能够使得在Linux、Mac或Windows上的开发人员可以获得一致的开发环境。除了安装Vagrant之外,没有其他步骤,没有单击,操作系统之间没有中断。

由于Vagrant的灵活性,你可以保留相同的工作流来管理不使用Docker的系统。这可能是另一个基于linux的系统,也可能是完全不同的系统,比如基于windows的开发环境。对于vagrant,工作流程总是一样的。

Docker Host VM

Linux容器不能在非Linux机器上本地运行。如果你的开发人员使用的是Mac或Windows,那么他们就不能本地运行Docker容器。vagrant检测这些情况,并自动运行Linux虚拟机来运行Docker容器。
然后,针对所有基于docker的开发环境,vagrant与vagrant共享这个虚拟机。这意味着仅使用一个虚拟机,vagrant就可以管理许多Docker环境。

即使是在使用Docker主机虚拟机时,同步文件夹、SSH和其他一些特性也可以像你预期的那样在所有平台上统一工作。
如果Linux上的Docker使用了Vagrant,那么Vagrant不会自动运行虚拟机,而是会本地运行Docker。

在默认情况下,Vagrant运行安装了Docker的默认虚拟机。但是你也可以指定任何vagrant管理的机器作为Docker主机。一个例子如下:

Vagrant.configure("") do |config|
config.vm.provider "docker" do |d|
d.vagrant_vagrantfile = "../docker-host/Vagrantfile"
end
end

通过上面的配置,Vagrant将在指定为Docker主机的Vagrantfile中使用默认的机器。这是非常强大的。有了这个特性,就可以让Vagrant使用其支持的任何操作系统(如Ubuntu、RHEL或CoreOS)自动管理Docker主机。如果需要,还可以针对每个开发环境更改主机VM。
vagrant是聪明的:如果主机VM匹配多个Vagrantfile文件,那么单个VM将被共享。如果没有必要,vagrant不会启动多个vm。
由于Vagrant只是在幕后重用它来管理这个主机VM,所以你可以使用这个VM的所有特性:provider、同步文件夹、网络等等。这是构建适合你项目的开发环境的最终灵活性。

Dockerfiles or Docker Index

Vagrant中的Docker provider很灵活,支持本地dockerfile和Docker索引中的Docker容器。这对于能够在Dockerfile上进行迭代,同时还可能依赖于索引中的某些内容非常有用。
例如,下面是一个可以用于web开发环境的Vagrantfile文件:

Vagrant.configure("") do |config|
config.vm.define "app" do |app|
app.vm.provider "docker" do |d|
d.build_dir = "."
d.link "db"
end
end config.vm.define "db" do |app|
app.vm.provider "docker" do |d|
d.image = "paintedfox/postgresql"
d.name = "db"
end
end
end

在上面的例子中,我们从Dockerfile构建“app”环境,Dockerfile可能构建web应用程序的容器。然后,该应用程序环境链接到“db”环境,该环境使用“paintedfox/postgresql”镜像提供postgresql数据库。
在这两种情况下,同步文件夹的工作方式与vagrant一样,所以数据可以持久化到容器之外,文件修改可以镜像回容器中。

Containers with SSH

Docker容器的一般方法是让每个容器都是一个应用程序,而不是一个完整的多进程系统。在这些情况下,SSH不可用,所以你不能利用vagrant 的特性,例如vagrant SSH、预配置等。但是,如果容器确实支持SSH,那么所有这些特性都会得到支持并发挥作用。
例如,下面的Vagrantfile使用Phusion创建的baseimage镜像,它的行为更像是一个轻量级虚拟机:

Vagrant.configure("") do |config|
config.vm.provider "docker" do |d|
d.cmd = ["/sbin/my_init", "--enable-insecure-key"\]
d.image = "phusion/baseimage"
d.has_ssh = true
end config.ssh.username = "root"
config.ssh.private_key_path = "phusion.key"
end

假设你在适当的位置上有“phusion.key”,上面将启动容器,等待SSH,运行任何预配置,设置任何主机名等等。
同样,无论你是本地运行Docker,还是通过Vagrant的自动托管主机VM运行Docker,所有这些特性都可以工作。

Docker-Specific Enhancements

到目前为止,将Docker与Vagrant结合使用的行为和工作流程与将vagker与VirtualBox、VMware或EC2等云服务结合使用的行为和工作流程是相同的。
但是,vagrant 1.6确实引入了一些新命令,这些命令是专门为Docker提供程序而编写的,目的是为vagrant提供一些额外的实用程序。
docker-logs显示来自容器的日志,还允许跟踪日志。对于单进程(非ssh)容器,这是观察进程输出的好方法。一个例子如下:

$ vagrant docker-logs web
Server listening on port ...
GET / .4ms
GET /images/header.png .1ms
GET /images/footer.png .8ms

docker-run允许在新容器中执行一次性命令。与同步文件夹一起,这对于某些环境非常有用。例如,如果你想在Rails环境中运行测试,它可能看起来像这样:

$ vagrant docker-run web -- rake test:unit

Next

Docker provider允许vagrant使用Docker管理的Linux容器管理开发环境。这使得vagrant的用户可以在有意义的地方使用这种风格的开发,而无需牺牲任何其他开发环境的工作流。
我们现在正接近vagrant 1.6版本的发行!功能预览刚刚结束,我们很高兴很快就可以发布了。

详细使用往下看

vagrant特性——基于docker开发环境(docker和vagrant的结合)-0-简介的更多相关文章

  1. vagrant打造自己的开发环境

    vagrant打造自己的开发环境 缘由: 在网上看到斌哥,爽神都写了关于vagrant的博客,都在说很强大,所以很好奇这玩意怎么个强大,然后也就自己来一发玩玩看看. 真实缘由: 说实话是电脑配置太低, ...

  2. 使用Vagrant搭建本地python开发环境

    使用Vagrant搭建本地python开发环境 关于vagrant:Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境,它使用Oracle的开源VirtualBox虚拟化系统也可以使 ...

  3. Windows使用Vagrant&VirtualBox搭建虚拟开发环境

    Vagrant 是一款用来构建虚拟开发环境的工具 , 我们可以通过 Vagrant 封装一个 Linux 的开发环境 , 分发给团队成员 ; 成员可以在自己喜欢的桌面系统 Mac/Windows/Li ...

  4. vagrant特性——基于docker开发环境(docker和vagrant的结合)-1-基本使用

    Docker vagrant提供了使用Docker作为provider(其他的provider有virtualBox.VMware\hyper-V等)的开箱即用支持.这允许你的开发环境由Docker容 ...

  5. vagrant特性——基于docker开发环境(docker和vagrant的结合)-3-boxes和配置

    Docker Boxes Docker provider不需要vagrant box.因此其config.vm.box设置是完全可选的.但是,仍然可以使用并指定一个box来提供默认值.由于一个带着bo ...

  6. vagrant特性——基于docker开发环境(docker和vagrant的结合)-2-命令

    Docker Commands Docker provider公开了一些额外的vagrant命令,这些命令对于与Docker容器交互非常有用.这有助于你在vagrant之上的工作流程,这样你就可以在底 ...

  7. windows环境 springboot+docker开发环境搭建与hello word

    1,下载安装 docker toolbox 下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker t ...

  8. 企业应用架构研究系列十九:Docker开发环境

    软件行业流行这样一个说法,由于Docker 技术的成熟和该技术被广大厂商的普遍应用,成就了微服务领域的快速成长,衍生了云原生技术和公有云的进一步推广.我个人认为Dockers 技术.微服务技术.云原生 ...

  9. Hadoop伪分布配置与基于Eclipse开发环境搭建

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

随机推荐

  1. Android-事件分发(OnTouchEvent,OnTouch,OnClick)

    http://blog.csdn.net/lmj623565791/article/details/38960443 http://blog.csdn.net/guolin_blog/article/ ...

  2. 脚本执行错误---/bin/sh^M:损坏的解释器 没有那个文件或目录

    在执行脚本时,弹出错误提示: 这是由于脚本文件在保存时使用了DOS文件格式造成的,可以用vim打开文件,然后执行下列操作:

  3. 常见Java问题

    1.泛型的好处 保护了类型安全 避免了强制类型转化 2.final关键字的作用 final修饰的属性是常量 final修饰的方法不可被重写 final修饰的类不能被继承,如:String 3.静态变量 ...

  4. django-全文检索

    全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理 需要的第三方库: haystack:django的一个包,可以方便地对model里面的内容进行索引.搜索,设计为 ...

  5. layui的checkbox示例

    1.html页面: var isSkipcheckbox = ''; if (appOptions.isSkip != "0") { isSkipcheckbox = 'check ...

  6. 【代码笔记】iOS-MBProgressHUD+MJ

    一,效果图. 二,工程图. 三,代码. ViewController.m #import "ViewController.h" #import "MBProgressHU ...

  7. JS---函数名和变量名重名

    继续作用域的问题,今天上午看了一会,下午看又看到了一个类型的题,函数名和变量名相同的问题.之前还不会觉得函数名和变量名重名了会有什么冲突.也是没有去测试过..懒了.直接贴代码: 运行之后大家猜测结果是 ...

  8. IDEA项目搭建二——使用SpringBoot创建Web层

    一.编写底层代码 1.demo-common中创建FormatString类 先在默认com.tyh中创建package命名为common 删除自动生成的app.java,在common包下创建新类 ...

  9. iOS 开发多线程 —— GCD(1)

    本文是根据文顶顶老师的博客学习总结而来,如有不妥之处,还望指出.http://www.cnblogs.com/wendingding/p/3807716.html 概览: /* 纯c语言,提供了非常多 ...

  10. Python笔记(八):web开发

    #本文是在Windows环境下,Unix系统应该还要设置2个东西 (一)    采用MVC设计web应用 遵循   模型-视图-控制器(model-view-controlle) 模型:存储web应用 ...