2016-07-26 76 views
2

Vagrant文​​档介绍了如何启动使用Docker as provider以及how to provision a VM using Docker的VM。但是,没有关于是否可以同时使用两者的信息。是否可以使用Docker作为提供者和提供者运行Vagrant?

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

如果我现在可以和码头工人提供商创造一个流浪VM基于我的Python /的webapp Dockerfile和提供这台机器与其他容器(如Redis的),然后

  • 我想有一个虚拟机,这是非常快旋转起来,仍然模仿我的部署环境几乎完美,
  • 我可以用PyCharm IDE's remote interpreter functionality连接到Python解释器在本机并从中受益代码完成,调试等

对于这项工作,人们可能需要像Docker in Docker这样的基于Docker的虚拟机可以通过Docker配置器启动更多容器。

这种方法是否可行,或者是否有某个可用的工作示例?或者,如果不是,那么实现这个目标可能是一个很好的选择?

+0

你想运行docker的虚拟机? – CMPS

回答

0

是否可以使用Docker作为提供者和提供者运行Vagrant?

是的,你可以 - 我没有使用最新的版本流浪汉检查,但这是工作,直到流浪汉1.8.1

你想基本上是什么,如果你想旋转一个VM(运行Ubuntu或coreOS快速旋转并运行最少)运行多个码头集装箱。

当您运行流浪坞码头提供商时,您仍然可以管理您自己的流浪文件。

,所以你需要的主要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没有安装在盒子上,则安装docker),这样Docker就可以从你的虚拟机中获得。

好的,所以在这个阶段你有一个虚拟机,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泊坞窗提供商/容器Python和Redis的。