Docker 是一个应用程序容器,而不是像 LXD 这样的系统容器,是否可以使用 Linux OS Docker 映像(例如,对于 Ubuntu 或 Centos)通过创建一堆轻量级实例然后进行试验来自学 Linux、操作系统级网络使用诸如 NAT、桥接、路由、代理(各种)、防火墙(iptables)之类的东西......?
基本上,我不想使用像 VirtualBox 这样的重量级解决方案,因为我希望能够在各种设置中拥有多个 Linux 操作系统实例,所以我的实例越轻越好。
使用 LXD,我看到的一个问题是:除非我使用 ZFS 或 BTRFS 类型的文件系统,否则我将无法节省磁盘空间。
编辑:我的主机操作系统是 Ubuntu 20.04,而不是 Windows。
快速回答:是的。
就网络而言,Docker 容器和 LXC/LXD 容器都适合您的目的。
Linux 上的容器使用各种隔离技术实现,包括命名空间、seccomp、cgroup 等。这里的核心是网络命名空间(
CLONE_NEWNET
inclone(2)
),它创建了主机网络堆栈的精确副本,具有一组独立的网络接口、路由表和规则、防火墙(iptables 或 netfilter)等,使其适合于网络实验设置。唯一需要注意的是,容器通常无法访问主机内核的“危险”操作,例如管理内核模块。出于这个原因,如果您正在尝试使用 WireGuard 之类的东西,则必须在主机端安装该模块。除此之外,我认为使用容器进行网络实验没有问题,无论是 Docker 还是 LXD。
对于您配置和维护 ZFS / Btrfs 的担忧,我建议您使用带有 ZFS 支持的 LXD(从 Snapcraft 安装)。使用默认设置指南 (
lxd init
),您将能够创建支持所有高级功能的 ZFS 格式的“虚拟磁盘”,同时保持与主机系统中的单个文件一样简单。它应该驻留在/var/snap/lxd/common/lxd/disks
. (我不记得太多细节了,因为我已经将我的主机设置迁移到 ZFS,所以我直接使用 ZFS)。