vagrant特性——基于docker开发环境(docker和vagrant的结合)-0-简介
原文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-简介的更多相关文章
- vagrant打造自己的开发环境
vagrant打造自己的开发环境 缘由: 在网上看到斌哥,爽神都写了关于vagrant的博客,都在说很强大,所以很好奇这玩意怎么个强大,然后也就自己来一发玩玩看看. 真实缘由: 说实话是电脑配置太低, ...
- 使用Vagrant搭建本地python开发环境
使用Vagrant搭建本地python开发环境 关于vagrant:Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境,它使用Oracle的开源VirtualBox虚拟化系统也可以使 ...
- Windows使用Vagrant&VirtualBox搭建虚拟开发环境
Vagrant 是一款用来构建虚拟开发环境的工具 , 我们可以通过 Vagrant 封装一个 Linux 的开发环境 , 分发给团队成员 ; 成员可以在自己喜欢的桌面系统 Mac/Windows/Li ...
- vagrant特性——基于docker开发环境(docker和vagrant的结合)-1-基本使用
Docker vagrant提供了使用Docker作为provider(其他的provider有virtualBox.VMware\hyper-V等)的开箱即用支持.这允许你的开发环境由Docker容 ...
- vagrant特性——基于docker开发环境(docker和vagrant的结合)-3-boxes和配置
Docker Boxes Docker provider不需要vagrant box.因此其config.vm.box设置是完全可选的.但是,仍然可以使用并指定一个box来提供默认值.由于一个带着bo ...
- vagrant特性——基于docker开发环境(docker和vagrant的结合)-2-命令
Docker Commands Docker provider公开了一些额外的vagrant命令,这些命令对于与Docker容器交互非常有用.这有助于你在vagrant之上的工作流程,这样你就可以在底 ...
- windows环境 springboot+docker开发环境搭建与hello word
1,下载安装 docker toolbox 下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker t ...
- 企业应用架构研究系列十九:Docker开发环境
软件行业流行这样一个说法,由于Docker 技术的成熟和该技术被广大厂商的普遍应用,成就了微服务领域的快速成长,衍生了云原生技术和公有云的进一步推广.我个人认为Dockers 技术.微服务技术.云原生 ...
- Hadoop伪分布配置与基于Eclipse开发环境搭建
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
随机推荐
- [android] 看博客学习hashCode()和equals()
equals()是Object类提供的一个方法,众所周知,每一个java类都继承自Object,所以说每一个对象都有一个equals()方法,我们在用这个方法时却一般重写这个方法 Object类中eq ...
- Java基础——String类(二)
今天做了几道String常见操作.先来几个代码实例: 例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会. class TestTrim { public static void main(S ...
- Windows中的键盘快捷方式大全
Windows有很多键盘快捷方式,使用键盘快捷方式能够大大提高使用windows的效率,同时还能提升自己的逼格,背熟几个快捷方式,操作起来行云流水犹如大神一般! 页面较长,请使用目录浏览(点击跳转), ...
- Vue计算属性的用法
计算属性是个很好玩的东西,在这里面可以对数据模型进行操作,·也可以使用getter,setter方法.使用的话也是非常的简洁明了 这里写个例子 <!DOCTYPE html> <ht ...
- POJ2406(SummerTrainingDay10-I KMP)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 50036 Accepted: 20858 D ...
- var和const和let的区别
简述: 1.前端的变量申明,可以用到var,ES6的const(衡量)/let(变量) 2.在ES5用的都是var,到ES6之后,也就是2015年开始出现const/let. var 不会报错,有声明 ...
- 用jQuery实现全选-全不选-反选的功能
临近过年,刚学IT没多久的小白在这里祝大家在新的一年里:新春快乐,月月赚钱,天天开心,时时快乐,分分精彩,秒秒幸福,事事顺利 古人云:学而时习之,不亦说乎. 学习后经常温习所学的知识,也是件令人愉悦的 ...
- tinyint、smallint、bigint、int 区别
1byte=8bit [tinyint] 从 0 到 255 的整型数据.存储大小为 1 字节.如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数. [smallint] ...
- Jquery 打开新页面
1.在click事件触发时,先打开空白页面 var newWeb=window.open('_blank'); 2.在事件操作后,写入空白页面的链接 newWeb.location='新页面的链接地址 ...
- 《JavaScript面向对象编程指南》
第一章.引言 1.5 面向对象的程序设计常用概念 对象(名词):是指"事物"在程序设计语言中的表现形式. 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作 ...