为什么用lxc运行docker,因为更轻量,相对vm运行 管理更方便。
比如 家用环境的 aio上, 可以把路由器常用的功能 全部集成到一个或者多个lxc里面。
pve 跑vm 再去跑docker 虽然上手简单,但是会有一些其他问题。
之所以用lxc去运行docker,因为很多软件只有docker版本 或为了部署/更新/备份/更方便。
# 最小化部署docker
模板选择alpine,改一下ct源。不改也可以直接去国内镜像下载,例如: https://mirrors.tuna.tsinghua.edu.cn/proxmox/images/system/
|
|
去掉无特权容器的勾号,ip的地方选择dhcp,然后先不开机。其他按照默认设置即可
点选项 功能,选中 fuse 和 嵌套。
编辑nano /etc/pve/lxc/容器id.conf
具体查看本文 lxc 特权容器 和非特权容器的选择
章节,编辑完成后启动
启动后逐行运行,都有注释
|
|
这样运行的docker 不会有兼容性问题,也不会存在那些一知半解的人说的 什么什么不能运行的问题。
# lxc模板的选择
主要是 debian/ubuntu 和 alpine的 二选一
如果lxc 只打算用来跑docker 那么 肯定是首选alpine,alpine宿主lxc只有几M。如果要跑一些非docker的软件。
有几种情况下,建议选 debian/ubuntu
- alpine因为musl 和 rc的问题 和部分软件兼容性不好,可能需要手动处理一些东西。 如果你没有时间弄那些
- 部分软件的发行版 不支持alpine
- 想直接装deb
# lxc 特权容器 和非特权容器的选择
无特殊情况,首选特权容器。特权容器外挂pve的目录更方便,而且特权容器也是支持docker的。nano /etc/pve/lxc/容器id.conf
添加下面几行
|
|
# lxc内运行的服务 是直接安装还是再套一次docker
看服务的软件情况。优选直接安装,尤其是依赖很少的服务。
例如 ddns-go 作者提供二进制包,而且支持alpine,那么就没必要再套docker了。
再比如 思源笔记,作者没有提供二进制包,服务版只有docker版,那么就肯定就是docker来运行了。
再比如 alist ,如果你lxc跑的alpine ,alist能运行,但是不支持安装的启动服务里面,那么手写启动脚本,还是直接docker 那就随便你了。
# 一个lxc里面可以运行多少个服务,多少个docker
没有限制,但lxc也是容器,通常而言最好也遵循 一个容器一个服务的原则。 比如 lxc 100 运行openwrt 做旁路由/网关 lxc 101 运行 mosdns lxc 102 运行 alist lxc 103 运行 rustdesk 的两个中继服务 lxc 104 跑一个nginx webdav网盘 互相独立,这样最合理,备份和管理也方便一些。 但是你全部放到一个lxc里面 也没毛病。
# lxc 创建那么多内容够用嘛?
lxc 的内存 是上限内存 不是分给他就就全占用了。 所以创建你几十个lxc,但是都没有太大负载,每个都分给他10G内存,也是没问题的。
# lxc 里面可以再套一次pve嘛?
理论上可以,直接套kvm 再去跑一个windows 是可以的。
# lxc 内部的ssh反映慢
选项里面 勾选 嵌套 。重启即可
# lxc 内无法运行appimage 程序
选项里面 勾选 fuse 。重启即可
# lxc 挂载外部目录 没有写权限
非特权容器需要处理用户映射,特权容器可以直接读写。详情查看 本站内文章: https://dev.leiyanhui.com/pve/lxc-mount-dir/
# lxc 无法直接导入 openwrt的包
因为ostype 的问题,pve的webui界面操作里面不支持这个配置。用命令行导入即可,例子:
|
|
# lxc 可以运行出来一个桌面嘛
当然可以,你正常在lxc里面 安装桌面包就ok了。比如 gnome kde i3w 等等 都是可以的,而且可以开显卡加速
# lxc 里面可以运行一个windows嘛
可以,甚至 运行一个macos都是可以的。当然就是和docker里面跑win跑macos一样 都是需要 lxc 里面套kvm了。
# 现有虚拟机导入lxc 可以嘛?
可以,但是仅限linux虚拟机 : https://dev.leiyanhui.com/pve/kvm-to-lxc/