如果 docker 在 mac 上使用虚拟 machine 到 运行 那么它比 vagrant 有什么优势?
If docker uses virtual machine to run on a mac then what is its advantage over vagrant?
所以我在很多地方都读到了 docker 更快更高效,因为它使用容器而不是虚拟机,但是当我在我的 mac 上下载 docker 时,我意识到它使用虚拟框 运行 容器。我相信 linux machine docker 不需要虚拟框并且可以 运行 Linux 内核。这个对吗 ?
回到原来的问题。 docker 仍然是 faster/efficient 是因为它使用单个 VM 来 运行 多个容器,而不是 Vargrant 针对每个环境的新 VM 吗?
I believe on a linux machine docker doesn't need virtual box and can run on Linux Kernel. Is this correct ?
是的,因此需要 VirtualBox Linux 虚拟机(使用 TinyCore 发行版)
Is docker still faster/efficient because it uses a single VM to run multiple containers as opposed to Vargrant's new VM for every environment ?
是的,因为缺少 Hypervisor simulating the hardware and OS: here you can launch multiple containers all using directly the kernel (through direct system calls),而不必模拟一个 OS。
(注:2018 年 5 月,gVisor 是另一种选择:一个容器,模拟一个 OS!)
在“How is Docker different from a normal virtual machine?”查看更多信息。
当然记得Vagrant can use a docker provider。
这意味着您不必总是使用 Vagrant 提供功能完备的 VM,而是提供图像和容器。
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.image = "foo/bar"
end
end
所以我在很多地方都读到了 docker 更快更高效,因为它使用容器而不是虚拟机,但是当我在我的 mac 上下载 docker 时,我意识到它使用虚拟框 运行 容器。我相信 linux machine docker 不需要虚拟框并且可以 运行 Linux 内核。这个对吗 ?
回到原来的问题。 docker 仍然是 faster/efficient 是因为它使用单个 VM 来 运行 多个容器,而不是 Vargrant 针对每个环境的新 VM 吗?
I believe on a linux machine docker doesn't need virtual box and can run on Linux Kernel. Is this correct ?
是的,因此需要 VirtualBox Linux 虚拟机(使用 TinyCore 发行版)
Is docker still faster/efficient because it uses a single VM to run multiple containers as opposed to Vargrant's new VM for every environment ?
是的,因为缺少 Hypervisor simulating the hardware and OS: here you can launch multiple containers all using directly the kernel (through direct system calls),而不必模拟一个 OS。
(注:2018 年 5 月,gVisor 是另一种选择:一个容器,模拟一个 OS!)
在“How is Docker different from a normal virtual machine?”查看更多信息。
当然记得Vagrant can use a docker provider。
这意味着您不必总是使用 Vagrant 提供功能完备的 VM,而是提供图像和容器。
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.image = "foo/bar"
end
end