我之所以想这么做,是因为我正在开发一个Python web应用程序,无论如何都会通过Docker进行部署。它附带了一些依赖项(通过Dockerfile安装的系统和Python库(,以及在另一个容器中运行的Redis数据库。
如果我现在可以基于我的Python/Webapp Dockerfile创建一个带有Docker提供者的Vagrant VM,并为这台机器提供更多的容器(例如Redis(,那么
- 我会有一个虚拟机,它可以非常快速地启动,并且仍然几乎完美地模仿我的部署环境
- 我可以使用PyCharm IDE的远程解释器功能连接到这台机器中的Python解释器,并从代码完成、调试等方面获益
为了实现这一点,可能需要像Docker中的Docker这样的东西,这样基于Docker的虚拟机就可以通过Docker provisioner启动更多的容器。
这种方法在一般情况下可行吗?或者在某个地方有可用的工作示例吗?或者,如果没有,还有什么好的替代方案可以实现同样的目标?
有可能用Docker作为提供者和提供者来运行Vagrant吗?
是的,你可以-我没有查看最新的流浪者版本,但这一直有效,直到流浪者1.8.1
你想要的基本上是旋转一个运行多个docker容器的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将从你的VM中可用。
好的,所以在这个阶段,您有一个带有docker
提供程序的VM指向一个提供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。