运行Docker作为提供者和提供者可以运行Vagrant吗?

Vagrant文​​档介绍了如何启动一个使用Docker作为提供者的虚拟机,以及如何使用Docker提供虚拟机 。 但是,没有关于是否可以同时使用两者的信息。

我想这样做的原因是因为我正在开发一个Python Web应用程序,它将通过Docker进行部署。 它带有一些依赖项(通过Dockerfile安装的系统和Python库)以及运行在另一个容器中的Redis数据库。

如果我现在可以根据我的Python / Webapp Dockerfile创build一个Docker提供程序的Vagrant虚拟机,并为此计算机提供更多容器(例如Redis),那么

  • 我会有一个非常快速的虚拟机,可以很好地模拟我的部署环境,
  • 我可以使用PyCharm IDE的远程解释器function连接到本机中的Python解释器,并从代码完成,debugging等中受益。

为了达到这个目的,可能需要在Docker中使用类似Docker的东西,以便基于Docker的虚拟机可以通过Docker置备器启动更多的容器。

这种方法是可行的吗?或者有一个可用的例子吗? 或者,如果不是,那么实现这个目标可能是一个好的select?

运行Docker作为提供者和提供者可以运行Vagrant吗?

是的,你可以 – 我没有检查最新的stream浪汉版本,但这是一直工作到stream浪汉1.8.1

你想要的基本上是运行一个虚拟机(运行的Ubuntu或CoreOS,如果你想快速旋转和运行最小)运行多个docker集装箱。

当你运行stream浪docker提供商时,你仍然可以pipe理你自己的stream浪文件。

所以你需要主要的Vagrantfile(通常坐在你的项目的根目录)

# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| ... config.vm.provider "docker" do |docker| docker.vagrant_vagrantfile = "host/Vagrantfile" end ... end 

然后在你的host/Vagrantfile你会有类似的东西

 # -*- mode: ruby -*- # vi: set ft=ruby : # Create and configure the VM(s) Vagrant.configure(2) do |config| config.vm.hostname = "docker-host" # Spin up your own box (or one from Atlas) # and then provision it with Docker config.vm.box = "ubuntu/trusty64" config.vm.provision "docker" ... end 

这是另一个典型的Vagrantfile ,它指向将被旋转的文件夹(如果你想要最小的操作系统,它可以是Ubuntu,CentOS或者coreOS),它将提供docker(即如果docker没有安装在dock上,从您的VM可用。

好吧,在这个阶段,你有一个虚拟机与docker服务提供商指向一个VM提供docker。 现在你想要设置你的2个容器

在你的主要Vagrantfile你将添加2个容器,就像

 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| ... config.vm.provider "docker" do |docker| docker.vagrant_vagrantfile = "host/Vagrantfile" end ... config.vm.define "python" do |python| python.vm.provider "docker" do |docker| ... docker.image = "xxx" docker.ports = [80:80] docker.name = "python-system" end end config.vm.define "redis" do |redis| redis.vm.provider "docker" do |docker| ... docker.image = "xxx" docker.ports = [80:80] docker.name = "redis" end end end 

这将启动你的2个docker提供商/容器python和redis。