我有一个Vagrant文件,它只显示一个基本的Ubuntu服务器,然后依赖shell脚本来进行配置。这个shell脚本只是安装Docker和Docker Compose来设置我拥有的各种容器。
使用shell脚本执行此操作是否有意义?或者有没有办法告诉Vagrant直接使用Docker Compose进行配置?我不知道与Vagrant中现有的Docker配置器有多么不同。
答案 0 :(得分:37)
我最近提出了同样的问题,我创建了一个vagrant配置器插件,用于安装docker-compose并使用它来启动docker。使用它:
vagrant plugin install vagrant-docker-compose
将以下行添加到您的Vagrant文件中。
config.vm.provision :docker
config.vm.provision :docker_compose, yml: "/vagrant/docker-compose.yml", rebuild: true, run: "always"
有关完整示例,请参阅https://github.com/leighmcculloch/vagrant-docker-compose
答案 1 :(得分:10)
从流浪者1.7.2开始,似乎没有通过Docker Provisioner直接支持进行此类操作。提供商也没有提及它。 Vagrant docs: Docker provisioning,Vagrant docs: Docker commands
我的猜测是这个版本的Vagrant维护者感觉Vagrantfile与Docker提供程序一起使用时会提供类似的行为。这可以解释为什么在用Docker Compose替换之前他们没有冒险添加对Fig的直接支持。
我发现使用Docker with Vagrant要求您找到使用您认为最适合自己的每种工具的正确组合。 例如,您可能会发现使用Dockerfiles和Docker命令(如docker compose)比尝试将该逻辑实现到Vagrantfile更直观。或者,您可以尝试混合Dockerfiles并使用Vagrant引用Dockerfiles,它使用正常的Vagrantfile为您提供Dockerfile中的Docker逻辑和构建“orchestration”。
这可能是这样的:
使用非常简单的Vagrant Docker提供程序配置,依赖Dockerfile
来完成其他任务
使用d.build_dir = "."
引用Dockerfile
在Vagrant中使用Docker配置程序启动所有内容
vagrant up --provision-with docker