簡體   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