我是想用 PVE 整一个 DNS ,路由,网关的一体机,然后看网上的一些方案,都是先用 LXC 跑一个容器,然后在这个里面再跑一个 Docker 啥的。
有点不太明白 LXC 容器是个啥概念。
而且据说 LXC 下网卡的效率和直通类似?可以 virtio 的性能强得多?
那为啥不能在 LXC 容器下装 OpenWRT 或者爱快之类的?
1
PLDj0j9FY2y8Wm9i 2024-04-28 17:26:15 +08:00
LXC 可以装 op 啊
|
2
chfight 2024-04-28 17:26:33 +08:00
LXC 里面尽量不要跑 Docker
LXC 可以直接安装 OpenWRT |
![]() |
4
mouyase OP @chfight 那我要跑 Docker 的话,还是先建一个虚拟机装个 Ubuntu 然后再在 Ubuntu 里装 Docker 会比较好?
|
![]() |
6
frankilla 2024-04-28 17:32:19 +08:00
我之前用 lxc 跑 docker ,然后大佬给我提醒了一下 lxc 不要跑,会遇到各种各样闹心的问题。直接建议我 debian 跑 docker ,但是跑 OpenWrt 是没问题。不过我没有用 lxc 跑 OpenWrt ,强迫症吧。
|
![]() |
8
mohumohu 2024-04-28 17:42:09 +08:00
PVE 就是 debian ,按 debian 的教程直接装 docker 就可以,配置简单性能最好,但隔离性不够好,见仁见智。
或者专门装个虚拟机比如 alpine 来跑 docker ,稳定性兼容性隔离性都很好。 |
![]() |
9
geekvcn 2024-04-28 17:50:36 +08:00
关键词 chroot
LXC LXD Docker 都是基于 Linux 内核 chroot 。优点就是能共享系统硬件资源,缺点就是内核共享没法单独配置内核参数,隔离度没有虚拟机高。 现在 KVM 之类的虚拟机纯 CPU 基本也没损耗,缺点是在内存网卡等硬件的共享上代价比较高,但是固定内存,直通网卡显卡等硬件的情况下或者有专门的硬件卸载虚拟网卡 OVS 等负载和物理机性能差距也不大。 |
![]() |
10
geekvcn 2024-04-28 17:52:46 +08:00
准确说 Linux namespace 接近于沙盒运行,没有硬件虚拟损耗,本质上只是隔离内核资源
|
![]() |
11
geekvcn 2024-04-28 17:54:30 +08:00
你可以这么理解,一个共享内核上跑着不同的 rootfs
|
![]() |
12
mouyase OP |
13
Jeremial 2024-04-28 18:04:27 +08:00
虽然不建议用 lxc 跑 docker, 但是实际跑起来也没啥问题.
我是希望宿主机尽可能的干净, 全靠虚拟机或 lxc, 升级啥的方便. 目前已经在跑的 1. vm 1, 安装的 openwrt 2. 3 个 lxc 容器装 docker, 跑了 traefik, vaultwarden, ddns, jellyfin, plex 等服务. 显卡直通, 挂载 nfs 这些也没问题 3. 2 个 lxc 容器分别用包管理装的 tailscale 和 zerotier 4. vm 2, 装的黑群晖 |
14
Jeremial 2024-04-28 18:06:00 +08:00
@Jeremial sata 控制器直通给了黑群晖管理硬盘, 然后 PVE 宿主机通过 cifs 挂载群晖共享目录, 再将这些目录共享给 lxc 容器中的 jellyfin, plex 等服务
|
![]() |
15
ysc3839 2024-04-28 18:08:25 +08:00 via Android
lxc 是和 Docker 类似的另一套容器平台,使用的底层接口是一样的。
但是 lxc 有专门支持容器中运行 init system ,Docker 没有,如果你要在 Docker 容器里跑 systemd 之类的,一般得手动 mount 啥进去,还要开启 privileged ,跑起来还会发现 docker stop 不能正常停止 systemd service ,只能等超时被 kill 掉,问题挺多的。 用 lxd 的话直接跑就完事了,没有那么多坑,不过跑 OpenWrt 可能还是有些小坑,例如 iptables 未初始化的问题。 另外 Docker 许多参数在跑起来后就不能改了,比如不能 mount ,但是 lxd 可以运行时 mount 。 关于 lxd 和 lxc ,前者是后者的升级版,用起来会方便很多。我自己是只在 Ubuntu 上用过 lxd ,PVE 的 lxc 如何我不知道。 |
16
rulagiti 2024-04-28 20:57:08 +08:00
介于 openvz 和 docker 之间?
|
18
Jirajine 2024-04-28 21:56:08 +08:00
@ysc3839 #15 你搞错了,lxd 可不是 lxc 的升级版,它俩完全是两套对容器在不同层面的封装。
另外 lxc 命令实际上是 lxd 的 client ,lxc-*才是真的 lxc 。只能说 ubuntu 整的东西不适合除了它的目标群体以外的人。 |
![]() |
19
totoro625 2024-04-28 22:02:38 +08:00
lxc 跑 docker 只是第一个容器跑起来费劲,找点教程解决 docker 问题就好了
至少比 PVE 直接安装好的多,mp 挂载文件共享就很好用 我的理解是 lxc 相当于 docker ,但是更加底层,可以随意增减配置不会影响宿主机 |
![]() |
20
bkmi 2024-04-29 00:24:54 +08:00 via Android
我一直在 LXC 里跑 docker ,还没碰到过啥问题
|
![]() |
21
wueryi 2024-04-29 08:48:01 +08:00
虽然不建议 lxc 里跑 docker....但是咱这不是为了省事儿嘛,想测试个啥直接 clone 一个现成的 lxc 就能用 还不影响其他的容器 也不改动宿主机 不过如果是这个 docker 准备部署些常用的 呢不如新建个虚拟机里装 缺点就是内存是固定的
|
22
wsbqdyhm 2024-04-29 10:33:16 +08:00
我也是 LXC (乌班图)里跑 docker ,还没碰到过啥问题,备份管理相当方便,有问题直接删除从来。几秒搞定
|
![]() |
23
ChaosAttractor 2024-04-29 10:59:54 +08:00
这些都是 Linux 的容器化技术,内核层面依赖 CGourps 实现,它可以提供在同一个内核中隔离多个用户空间进程,你可以理解为 LXC 里面的进程和外面的进程性能什么都是一样的(当然也可以限制),只是所有东西互相隔离
共享内核意味着 0 额外性能和内存开销,只有里面的进程会占用内存 而 LXC 则是管理管理 CGroups 和各种 Namespace 隔离的用户空间程序,类似的还有 ContainerD 和 LXD ,Docker 和 K8S 则基于 ContainerD 此外它们支持嵌套,所以在 LXC 中运行 Docker 并无不妥,因为 LXC 一般直接用于替代 Hypervisor 但 LXC 的网络基于内核的 NetNS ,并且因为共享内核和非特权的设计使得 eBPF 和 iptables/nftables 功能受限,而且大概率你还需要 CPU 转发(虚拟化则你可以直通网卡),各种硬件卸载功能也受限(当然如果你在用最新最热的 Mellanox 网卡那支持的还蛮好的) 一般作为路由我觉得不太合适 |
![]() |
24
geekvcn 2024-04-29 14:19:23 +08:00 via Android
@ChaosAttractor LXC 可以启用特权容器,直接把物理网卡资源传给容器,并不一定要用 veth 网卡
|
25
busier 2024-04-29 19:20:59 +08:00
lxc 是操作系统容器
docker 是应用的容器 本质一样,定位不同 |
![]() |
26
scguanzhong 2024-04-30 15:27:08 +08:00
唉我用 lxc 跑 docker ,总是会遇到网络问题,重启又好了
直接虚拟机装个 ubuntu ,一点问题都没有 |
![]() |
27
shao 2024-08-09 10:44:29 +08:00
一直用 PVE LXC 跑 debian ,debian 跑 docker 。
直到遇到 MongoDB ,才知道 cpu 不支持 avx 。 |