我可以使用 Docker Compose 直接配置 Vagrant 吗?

Can I use Docker Compose to provision Vagrant directly?

我有一个 Vagrant 文件,它只启动一个基础 Ubuntu 服务器,然后依赖 shell 脚本来进行配置。而这个 shell 脚本只是关于安装 Docker 和 Docker Compose 来设置我拥有的各种容器。

使用 shell 脚本来执行此操作是否有意义?或者有没有办法告诉 Vagrant 直接使用 Docker Compose 进行配置?我不知道这与 Vagrant 中已有的 Docker 供应商有何不同。

从 vagrant 1.7.2 开始,似乎不直接支持通过 Docker Provisioner 来执行此类操作。提供商也没有提及它。 Vagrant docs: Docker provisioning, Vagrant docs: Docker commands

我猜这个版本的 Vagrant 维护者认为 Vagrantfile 在与 Docker 提供程序一起使用时会提供类似的行为。这或许可以解释为什么在 Fig 被 Docker Compose 取代之前,他们没有冒险添加对 Fig 的直接支持。

我发现将 Docker 与 Vagrant 一起使用需要您找到使用您认为最适合自己的每种工具的正确组合。 例如,您可能会发现使用 Docker 文件和 Docker 命令(如 docker 组合)比尝试将该逻辑实现到 Vagrantfile 中更直观。或者,您可以尝试混合使用 Docker 文件并使用 Vagrant 引用 Docker 文件,这为您提供 Docker 文件中的 Docker 逻辑和构建 "orchestration" 使用普通的 Vagrantfile。

这可能是这样的:

  1. 使用非常简单的 Vagrant Docker 提供程序配置,其他一切都依赖 Dockerfile

    使用d.build_dir = "."引用Dockerfile

  2. 在 Vagrant 中使用 Docker provisioner 开始一切

    vagrant up --provision-with docker
    

我最近提出了同样的问题,我创建了一个安装 docker-compose 并使用它启动 docker 的 vagrant provisioner 插件。使用它:

  1. 安装插件:vagrant plugin install vagrant-docker-compose
  2. 将以下行添加到您的 Vagrantfile。

    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