Vagrant和Docker提供商:为Linux主机强制代理VM的方法?

时间:2015-05-22 07:03:02

标签: linux docker vagrant dockerfile

TL& DR:有没有办法强制Vagrant使用代理VM,即使主机操作系统本身支持Docker?

我使用Vagrant和Docker提供程序。 Vagrant VM是操作系统和Docker容器托管我的应用程序(Web服务器,数据库)。

问题:

  

Linux容器不能在非Linux机器上本机运行。如果你的   开发人员在Mac或Windows上,他们无法运行Docker容器   本身。 Vagrant检测到这些情况,自动旋转a   Linux虚拟机运行Docker容器。

     

[...]

     

如果Vagrant在Linux上与Docker一起使用, Vagrant不会   自动启动虚拟机,而运行Docker   原生

来源:http://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html

很不错的是,Vagrant会自动启动一个不支持原生Docker的操作系统代理虚拟机,因为它们具有相同的操作系统。 但是对于Linux主机,我们仍然坚持原生Docker安装,这几乎没有问题:

  • 文件/文件夹权限
  • 针对不同Linux操作系统的不同用户(Apache用户有时" apache"有时" www",取决于您的Linux发行版)

以下是我的Vagrant文​​件供参考:

DockerHost.Vagrantfile

Vagrant.configure("2") do |config|

  config.vm.provision "docker"
  config.vm.box = "ubuntu/trusty64"
  config.vm.define "dockerhost"

  config.vm.network :forwarded_port, guest: 80, host: 8080
  config.vm.synced_folder "/sites", "/sites" [...]

  config.vm.provider :virtualbox do |vb|
    vb.name = "Vagrant-Dockerhost"
    vb.memory = 1024 # => Required by MySQL Server
  end

end

Vagrantfile

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
DOCKER_HOST_NAME = "dockerhost"
DOCKER_HOST_VAGRANTFILE = "DockerHost.Vagrantfile"

Vagrant.configure("2") do |config|

  config.vm.define "mysql-server" do |v|
    v.vm.provider "docker" do |d|
      d.image = "mysql"
      d.name = "mysql-server"
      d.env = {
        MYSQL_ROOT_PASSWORD: "rootpasswd",
        MYSQL_USER: "mysqluser",
        MYSQL_PASSWORD: "userpasswd",
        MYSQL_DATABASE: "dev"
      }
      d.volumes = ["/mysql:/var/lib/mysql"]
      d.cmd = ["/entrypoint.sh", "mysqld"]
      d.remains_running = true
      d.vagrant_machine = "#{DOCKER_HOST_NAME}"
      d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}"
    end
  end

  config.vm.define "apache-server" do |v|
    v.vm.provider "docker" do |d|
      d.image = "lacavalerie/apache-server"
      d.ports = ["80:80"]
      d.name = "apache-server"
      d.link("mysql-server:db")
      d.volumes = [...]
      d.cmd = ["/scripts/setup.rb"]
      d.remains_running = true
      d.vagrant_machine = "#{DOCKER_HOST_NAME}"
      d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}"
    end
  end
end

1 个答案:

答案 0 :(得分:0)

只需使用d.force_host_vm = true选项

即可

来自Vagrant docs:

  

force_host_vm(boolean) - 如果为true,那么主机虚拟机甚至会被启动   如果运行Vagrant的计算机支持Linux容器。这是   有助于强制运行Docker的一致环境。这个值   在Mac和Windows主机上默认为“true”,默认为“false”   Linux主机。选择使用其他Docker的Mac / Windows用户   提供者或选择加入本机Docker构建可以明确地设置它   value为false以禁用该行为。