流浪汉码头提供商缓慢构建

时间:2015-07-13 20:32:12

标签: docker vagrant vagrantfile dockerfile vagrant-windows

我正在尝试在Windows机器上使用Vagrant和docker provider。 我有像这样的Vagrantfile:

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.define "app" do |app|
        app.vm.provider "docker" do |d|
            d.name = "app"
            d.build_dir = "."
            d.vagrant_machine = "dockerhost"
            d.vagrant_vagrantfile = "./DockerhostVagrantfile"
        end
    end
end

Docker主机定义如下:

Vagrant.configure("2") do |config|
    config.vm.synced_folder ".", "/vagrant", type: "smb"
    config.vm.provision "docker"
    config.vm.define "dockerhost"
    config.vm.box = "ubuntu/trusty64"
    config.vm.network "forwarded_port",
    guest: 8080, host: 8080
    config.vm.provider :virtualbox do |vb|
      vb.name = "dockerhost"
    end
end

像这样的Docker容器:

FROM ubuntu:14.04

WORKDIR /vagrant/application
# .... install stuff
EXPOSE 8080

CMD ["/bin/bash"]

问题是每当我做vagrant docker-run app -- bash并且必须重建dockerimage时,这个过程需要很长时间。

// ....
app: Sending build context to Docker daemon 180.5 MB
app: Sending build context to Docker daemon   181 MB
app: Sending build context to Docker daemon 181.6 MB
// ....

我认为这是因为dockerhost内的文件夹装有vboxfs(我发现它非常慢)。

有什么办法可以强制Vagrant使用smb

其他因素造成的性能问题?

1 个答案:

答案 0 :(得分:1)

最后,我找到了一个解决方案,如何使用smb代替vboxfs来装载docker build directory

如此处所述[{3}}

可以定义host_vm_build_dir_options属性。所以我修改了我的Vagrantfile

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.define "app" do |app|
        app.vm.provider "docker" do |d|
            d.name = "app"
            d.build_dir = "."
            d.vagrant_machine = "dockerhost"
            d.vagrant_vagrantfile = "./DockerhostVagrantfile"
            d.host_vm_build_dir_options = {
                type: "smb"
            }
        end
    end
end

无论如何,真正的问题速度是由于我的项目根目录中有Dockerfile所以所有文件都被发送到主机。我通过将它移动到只有Dockerfile的Docker文件夹解决了这个问题。