pve 用lxc容器运行docker最小化部署,以及lxc所有问题汇总!
为什么用lxc运行docker,因为更轻量,相对vm运行 管理更方便。
比如 家用环境的 aio上, 可以把路由器常用的功能 全部集成到一个或者多个lxc里面。
pve 跑vm 再去跑docker 虽然上手简单,但是会有一些其他问题。
之所以用lxc去运行docker,因为很多软件只有docker版本 或为了部署/更新/备份/更方便。
#最小化部署docker
模板选择alpine,改一下ct源。不改也可以直接去国内镜像下载,例如: https://mirrors.tuna.tsinghua.edu.cn/proxmox/images/system/
https://mirrors.tuna.tsinghua.edu.cn/proxmox/images/system/alpine-3.17-default_20221129_amd64.tar.xz
去掉无特权容器的勾号,ip的地方选择dhcp,然后先不开机。其他按照默认设置即可
点选项 功能,选中 fuse 和 嵌套。
编辑nano /etc/pve/lxc/容器id.conf 具体查看本文 lxc 特权容器 和非特权容器的选择 章节,编辑完成后启动
启动后逐行运行,都有注释
# 替换国内源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
# 安装时区设置
apk add tzdata
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
# 卸载时区
apk del tzdata
rm -rf /var/cache/apk/*
# 安装docker
apk add docker #nano
rm -rf /var/cache/apk/*
# 开机启动启动docker
rc-update add docker boot
# 手动启动docker
service docker start
# 查看docker版本
docker version
这样运行的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.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
#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界面操作里面不支持这个配置。用命令行导入即可,例子:
pct create 2008 /var/lib/vz/template/cache/openwrt-dmz-02.05.2023-x86-64-generic-rootfs__1_.tar.gz --arch amd64 \
--hostname dmz-OpenWrt --rootfs local:2 --memory 2048 -swap 0 --cores 12 --ostype unmanaged \
--unprivileged 0 -net0 bridge=vmbr0,name=eth0
#lxc 可以运行出来一个桌面嘛
当然可以,你正常在lxc里面 安装桌面包就ok了。比如 gnome kde i3w 等等 都是可以的,而且可以开显卡加速
#lxc 里面可以运行一个windows嘛
可以,甚至 运行一个macos都是可以的。当然就是和docker里面跑win跑macos一样 都是需要 lxc 里面套kvm了。
#现有虚拟机导入lxc 可以嘛?
可以,但是仅限linux虚拟机 : https://dev.leiyanhui.com/pve/kvm-to-lxc/