是否可以使用 Docker 作为提供者和供应者来运行 Vagrant?
是的,你可以 - 我没有检查最新的 vagrant 版本,但这一直有效到 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)所以 docker 将是可从您的 VM 获得。
好的,所以在这个阶段你有一个虚拟机,docker
提供者指向一个提供 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。