原文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. Linux应用调试-strace命令

    1.strace简介 strace常用来跟踪进程执行时的系统调用和所接收的信号.通过strace可以知道应用程序打开了哪些文件,以及读写了什么内容,包括消耗的时间以及返回值等 2.安装strace命令 ...

  2. 2.移植3.4内核-支持烧写yaffs2,裁剪内核并制作补丁

    在上章-制作文件系统,并使内核成功启动jffs2文件系统了 本章主要内容如下: 1)使内核支持yaffs2文件系统 2)裁剪内核 3)制作内核补丁 1.首先获取yaffs2源码(参考git命令使用详解 ...

  3. 记一次SQL注入实战

    刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布.今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了. 本文仅供学习交流,目的是为了构建更加安全的网络环境! ...

  4. Vue之组件使用(二)

    补充一下:之前没提到,这里是一个父子组件通信的方法 如果想要使同一个组件实现不同的效果,那么可以这样做. 把需要封装的组件模板写在template中 <template id="cou ...

  5. POJ2236(KB5-A)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 28617   Accepted: 118 ...

  6. js之展开收缩菜单,用到window.onload ,onclick,

    目标效果:点击标签1,如果列表标签的style的display是block,改成none,否则改成block,来达到展开收缩菜单效果 一.准备阶段 html文件 <!DOCTYPE html&g ...

  7. Context 上下文

    全称:context 解释:上下文,在我们的开发的程序中,通常使用context上下文. 理解:结合实际生活我们可以把它理解为是语境,比如A说:我喜欢他. 那么这个他是谁,我们不知道,如果在这句话之前 ...

  8. JS UNIX 时间戳与时间格式转换

    上代码,不多说了,这个没啥说的,记录一下: var date = new Date() // Date 2019-03-05T13:50:39.775Z // 获取1970 至今的毫秒数 var ti ...

  9. 1.String、StringBuffer与StringBuilder之间区别

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...

  10. H5音乐播放器源码地址

    源码获取 https://pan.baidu.com/s/1pR_bhIFFQWU6TK9ZvrRWIA      安卓安装包下载地址 https://pan.baidu.com/s/1Z8HF5LY ...