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