Vagrant文档介绍了如何启动使用Docker as provider以及how to provision a VM using Docker的VM。但是,没有关于是否可以同时使用两者的信息。
我之所以这样做是因为我正在开发一个Python Web应用程序,无论如何都将通过Docker部署。它带有一些依赖项(通过Dockerfile安装的系统和Python库)以及在另一个容器中运行的Redis数据库。
如果我现在可以根据我的Python / Webapp Dockerfile创建一个带有Docker提供程序的Vagrant VM,并为该机器配置更多容器(例如Redis),那么
为了实现这一点,可能需要Docker in Docker这样的东西,以便基于Docker的VM可以通过Docker配置器启动更多容器。
这种方法一般是否可行,或者某处有可用的工作示例?或者如果没有,那么实现同样的目标可能是一个很好的替代方案吗?
答案 0 :(得分:0)
是否可以使用Docker作为提供者和配置者运行Vagrant?
是的,你可以 - 我没有检查最新的流浪汉版本,但这是工作直到流浪汉1.8.1
你想要的主要是在运行多个docker容器时旋转一个VM(运行ubuntu或coreOS,如果你想快速旋转并运行最小)。
当您运行vagrant docker提供程序时,您仍然可以管理自己的Vagrantfile。
因此您需要主要的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)在盒子上)所以你的VM可以使用docker。
好的,所以在这个阶段你有一个VM docker
提供商指向一个提供docker的VM。现在您要设置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。