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/

1
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 特权容器 和非特权容器的选择 章节,编辑完成后启动 启动后逐行运行,都有注释

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 替换国内源
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 添加下面几行

1
2
3
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界面操作里面不支持这个配置。用命令行导入即可,例子:

1
2
3
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/

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计