docker 容器是否获得与主机容器相同的带宽?或者我们是否需要配置最小值和(或)最大值。我注意到如果我们需要运行 CPU 密集型作业,我们需要覆盖默认 RAM(即 2 GB)和交换空间配置。我们还需要配置磁盘空间吗?还是默认情况下获得与实际硬盘一样多的空间。
3 回答
内存和 CPU 由 docker 使用 cgroups 控制。如果不配置这些,它们是不受限制的,可以使用 docker 主机上的所有内存和 CPU。如果您在包含所有 Docker for Desktop 安装的 VM 中运行,那么您将受限于该 VM 的资源。
磁盘空间通常受限于 /var/lib/docker 中可用的磁盘空间。出于这个原因,许多人将其作为不同的坐骑。如果您将 devicemapper 用于 docker 的图形驱动程序(这在很大程度上已被弃用),创建预先分配的磁盘空间块,您可以控制该块的大小。您可以通过使用只读根文件系统运行容器来限制容器,并将卷安装到具有有限磁盘空间的容器中。我已经看到这是通过环回设备安装完成的,但它需要在 docker 之外进行一些配置来设置环回设备。对于 VM,您将再次受到分配给该 VM 的磁盘空间的限制。
默认情况下,网络带宽是无限的。我看过一个名为docker-tc的有趣项目,它监视容器的标签并使用tc
(流量控制)更新容器的带宽设置。
这在一定程度上取决于您的主机系统是什么以及它有多旧。
在所有情况下,网络带宽都没有明确限制或在主机和容器之间分配;一个容器可以根据主机的限制执行尽可能多的网络 I/O。
在当前的本机 Linux上,没有桌面应用程序,并且docker info
会说类似Storage driver: overlay2
(overlay
并且aufs
在这里也很好)。对内存、CPU 或磁盘使用没有特殊限制;在所有情况下,容器最多可以使用完整的物理主机资源,除非有docker run
选项限制。
在较旧的本机 Linux上,没有桌面应用程序并docker info
显示Storage driver: devicemapper
. (考虑升级你的主机!)所有容器和图像都存储在一个单独的文件系统中,并且它的大小是有限的(它包含在docker info
输出中);命名卷和主机绑定挂载位于此空间之外。同样,内存和 CPU 并没有本质上的限制。
Docker Toolbox 和 Docker for Mac都使用虚拟机为非 Linux 主机提供 Linux 内核。如果您看到“内存”滑块,您可能正在使用这样的解决方案。容器、映像和命名卷的磁盘使用受限于 VM 容量以及内存和 CPU。主机绑定挂载通常会传递到主机系统。