Mis*_*r_L 2 virtual-machine docker
据我了解,VM 使用硬件虚拟化,而 docker 使用软件虚拟化,因此具有更好的性能(例如,我在 Windows 机器上运行 Dockerized Linux)。但操作系统虚拟化比硬件虚拟化更快的原因究竟是什么?
Docker 不做虚拟化。它使用内核命名空间来实现类似 chroot 的效果,不仅针对根文件系统,还针对进程信息(PID 命名空间)、挂载点、网络、IPC(共享内存)、UTS 信息(主机名)和用户 ID。
容器与主机共享内核。为了安全,Docker 使用 AppArmor/SELinux、Linux 功能和seccomp来过滤系统调用。控制组(称为cgroups)用于进程记帐和对资源施加限制。
Docker 与虚拟化无关。这是关于容器化(如何在隔离环境中运行进程)。
这意味着如果不使用某种虚拟化(Virtualbox、Hyper-v...),您就无法在 Windows 上运行 Linux 容器,也无法在 Linux 上运行Windows 容器。在开发时在笔记本电脑上执行此操作是可以的,但在生产中您会为您的容器选择合适的架构。
来自系统管理员容器指南:
传统的 Linux 容器实际上只是Linux 系统上的普通进程。这些进程组使用资源限制与其他进程组隔离:
- (对照组 [ cgroups ]),
- Linux 安全约束(Unix 权限、功能、SELinux、AppArmor、seccomp 等),以及
- 命名空间(PID、网络、挂载等)。
docker ...使用 linux 命令手动设置所有这些(网络命名空间、iptable-rules 等)会很棘手,所以当你键入命令并且事情在幕后发生时,docker-daemon 的工作就是完成这些...
首先,由于引入了复杂性,容器的速度可能不如直接在主机网络堆栈上运行进程快。例如,请参阅:在 docker 容器中运行 nginx 的性能问题
但是,他们会为您提供速度。如何?:
容器是“linux”的东西,但容器化浪潮也对 Windows 领域产生了影响。一开始docker-toolbox是使用 Virtualbox 在 Linux 虚拟机上运行容器。后来docker-for-windows引入并提供了直接在主机或hyper-v. 如果您访问Windows 容器类型,您可以找到更多信息。
| 归档时间: |
|
| 查看次数: |
5639 次 |
| 最近记录: |