繁体   English   中英

流浪者和Docker提供者:一种为Linux主机强制代理VM的方法?

[英]Vagrant and Docker provider: a way to force proxy VM for Linux hosts?

TL&DR: 即使主机操作系统本身支持Docker,是否有一种方法可以强制Vagrant使用代理VM?

我正在将Vagrant与Docker提供程序一起使用。 Vagrant VM是OS,而Docker容器托管了我的应用程序(Web服务器,DB)。

问题:

Linux容器不能在非Linux机器上本地运行。 如果您的开发人员是在Mac或Windows上,则他们不能本地运行Docker容器。 Vagrant检测到这些情况,并自动启动Linux虚拟机以运行Docker容器。

[...]

如果Vagrant与Linux上的Docker一起使用,则Vagrant不会自动启动虚拟机 ,而是将在本地运行Docker

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

Vagrant自动为不支持Docker的OS启动一个代理虚拟机非常好,因为它们具有相同的OS。 但是对于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

只需使用d.force_host_vm = true选项

从Vagrant docs:

force_host_vm(布尔值) -如果为true,则即使运行Vagrant的计算机支持Linux容器,也会启动主机VM。 这对于强制使用一致的环境来运行Docker非常有用。 在Mac和Windows主机上,此值默认为“ true”,在Linux主机上,默认值为“ false”。 选择使用其他Docker提供程序或选择加入本机Docker构建的Mac / Windows用户可以将此值显式设置为false以禁用该行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM