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 设计