原文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. apache2.4.33伪静态配置入门教程(1)

    伪静态: 把动态网页的请求方式伪装成静态网页 要使用伪静态技术,要在httpd.conf中启用伪静态模块: LoadModule rewrite_module modules/mod_rewrite. ...

  2. macbook 外接显示器黑屏,不显示

    我的mac本有点老了,11年底的那款 整了个显示器,刚开始连上没问题,后来开机状态拔了雷电线,再插  或者关机后莫名的原因再启动,显示器黑屏 网上好多方法都不行,自己总结了一个方法 拔掉连接线,关闭m ...

  3. mysql小试题3

    查询结果:

  4. 转载文章CSS3的calc()使用

    calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我,说CSS3中有一个属性 ...

  5. js弹窗 js弹出DIV,并使整个页面背景变暗

    1.首先写一个遮罩层div,然后再写一个弹窗的div <!-- 遮罩层 --> <div id="cover" style="background: # ...

  6. css3的calc()属性

    1.calc()是css3的一个新增的功能,用来指定元素的长度,你可以使用calc()给元素的border.margin.pading.font-size和width等属性动态的设置值. 2.calc ...

  7. ubuntu执行sudo apt-get update 时出现的错误及解决办法

    一.错误描述 W: GPG error: http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial InRelease: The followi ...

  8. 微信小程序开发--模板(template)使用,数据加载,点击交互

    微信小程序视图层提供了 模板(template),可以在模板中定义代码片段,然后在不同的地方调用.结果在数据渲染那懵逼了.按照官网上对模板的说明和对数据的加载. 1.定义模板 使用name属性,作为模 ...

  9. sklearn——数据集调用及应用

    忙了许久,总算是又想起这边还没写完呢. 那今天就写写sklearn库的一部分简单内容吧,包括数据集调用,聚类,轮廓系数等等.   自带数据集API 数据集函数 中文翻译 任务类型 数据规模 load_ ...

  10. 记一次Linux下数据统计

    需求: 服务端有应用访问日志,需要统计某一个API,访问top N的通道. 统计思路: 1.筛选/过滤待统计API: 2.分割,获取待统计具体字段: 3.计数: 4.按照计数结果降序排序: 5.截取t ...