原文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. 过滤器模式(Filter Pattern)

    过滤器模式 一.什么是过滤器模式   过滤器模式(Filter Pattern),这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类型的设计模式属于结构型 ...

  2. ubuntu修改ssh服务的端口号

    一.找到ssh配置文件位置 vim /etc/ssh/sshd_config 二.修改ssh登录端口号 修改 port 22 为 port xxxx 三.重启ssh服务 /etc/init.d/ssh ...

  3. linux系统编程:自己动手写一个ls命令

    ls用于列举目录内容,要实现这个功能,毫无疑问,需要读取目录,涉及到两个api: opendir:DIR *opendir(const char *name), 传文件名,返回一个指针,指向目录序列 ...

  4. POJ1611(KB2-B)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 39211   Accepted: 18981 De ...

  5. JS 关于this p9

    关于this这个货,常常让我感到头疼,也很难说清这货到底是什么机制,今天就详细记录一下this,了解他就跟理解闭包差不多,不理解的时候我们会感到很难受总想着避开他,当我们真正理解之后,会有种茅塞顿开的 ...

  6. JavaScript高级编程———基本包装类型String和单体内置对象Math

    JavaScript高级编程———基本包装类型和单体内置对象 <script> var stringObject = new String("hello world") ...

  7. org.springframework.web.util.NestedServletException Handler processing failed; n

    因为谷歌的lists不支持或使用, 所有要改成java的list工具 谷歌list使用: import com.google.common.collect.Lists; .... Lists.newA ...

  8. css翻译名词术语

    原文 本书译法 其它译法(未采用) CSS - 层叠样式表.级联样式表.样式单 cascade 层叠(机制) 级联 fallback 回退(机制.措施.方案) 后备.回落.降级 selector 选择 ...

  9. 闲聊jQuery(一)

    Write less, do more. 这便是jQuery的宗旨!jQuery,一个高效.精简并且功能丰富的 JavaScript 工具库. 想必,对于每一个前端开发者,一定用过jQuery吧!俗话 ...

  10. Oracle EBS INV 创建物料搬运单

    Create or Replace PROCEDURE ProcessMoveOrder AS -- Common Declarations l_api_version NUMBER := 1.0; ...