PVE下使用LXC容器Alpine
前言瞎叨叨
LXC是Linux容器Linux Container的缩写,是原生linux内核提供的轻量级虚拟化技术。 LXC的容器只是在主机上的进程,共享同一个操作系统内核。LXC容器可以运行多个应用程序或服务。LXC容器可以在同一主机上共享文件系统和网络。 LXC容器适用于需要更接近于物理主机的隔离和资源独享的情况。
Docker容器的优势在于可移植性、分发和部署。 Docker使用镜像来构建容器,镜像是一个只读模板,它包含运行应用程序所需的所有东西。Docker容器是隔离的环境,具有自己的文件系统、网络和进程空间。Docker容器可以在同一主机上的多个镜像之间共享操作系统内核。Docker容器通常只用于运行单个应用程序或服务。
LXC容器可以看成不同的操作系统,共享了底层PVE的内核,所以更轻便,并且兼具隔离性,会更安全。
Docker容器则可以当作一个个不同的APP(应用程序)。
Alpine介绍:
Alpine是一个轻量级的 Linux 发行版,它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。
Alpine 由非商业组织维护的,支持广泛场景的 Linux发行版,它特别为资深/重度Linux用户而优化,关注安全,性能和资源效能。Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
它的优点是镜像体积小,安装软件速度快,安全性高,适合用于构建容器镜像。基于Alpine模版的LXC容器大小只有3M。 所以完全可以使用基于Alpine模版的LXC容器安装很多软件,比如:sing-box AdguardHome去广告,OpenWrt,mosdns,支持硬解的Jellyfin等等。
我的机器底层系统是PVE,玩的是虚拟化,隔离这些,要保持底层系统的干净安全,所以我不可能直接在PVE上安装其他软件,如果你是HomeAssistant的重度用户,直接去官网下载虚拟机版本的创建导入就可以了。我个人只是通过HomeAssistant来控制几个不同平台的开关,创建一个VM虚拟机太浪费了,所以选择docker版的HASS。虽然有点套娃了,但是比虚拟机版本的还是要节省很多资源。
下面演示PVE虚拟化平台 ,安装Alpine的LXC容器,在里面安装docker和HomeAssistant
创建CT容器
进入PVE后台,下载好alpine的CT模板,体积只有几兆。
创建CT容器过程和其他CT容器都一样,就不重复了。
记得创建CT的时候把无特权容器那里给取消掉就好了。二者区别如下:
无特权容器:
-
无法直接访问宿主机硬件资源,只能读取数据,适用于资源盘;
-
非特权才能直通Nvida vGPU
-
普通用户身份:将宿主机的普通用户映射成容器里的root,限制了root用户权限,比特权容器更安全
-
不支持NFS和SMB/CIFS协议,挂载会报错
特权容器:
-
可以直接访问宿主机硬件资源硬盘、显卡
-
支持NFS和SMB/CIFS协议,可以像在Linux系统中一样使用mount命令挂载SMB共享的目录
-
root用户身份:支持以root身份运行各种lxc命令
两者都可以创建完整的gnome kde桌面环境,或者虚拟一个Windows/macOS,启用嵌套以支持部署docker类应用、启用fuse来挂载Onedrive这样的网盘服务等。
也就是说,如果你打算在LXC中直接挂载其它虚拟机或其它LXC容器中的NFS/Samba目录,又有将显卡直通给docker下的应用(如jellyfin,emby,plex这些需要使用显卡转码的服务),应该选择LXC特权模式;否则大部分场景还是默认的无特权模式即可,例如DNS/文件服务器/共享数据库。
创建好后不要启动,点击LXC容器→选项→ 功能 里面把这些都选择上。
SSH连接到PVE主机 vi /etc/pve/lxc/
修改一下模板文件.把这几行添加到最后保存。
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
初始化alpine
开机启动alpine, 进入控制台:
控制台输入
setup-alpine
开始初始化,按照上图来就好了,一路回车。时区那里可能会卡一下,有的人出不来,找一下网络原因。国内输入RPC就好。
这里是让你选择镜像源,输入 S 回车 查看
可以看到14是国内的清华源 15是中科大的,这里按下q退出。
我这里输入15选择 中科大的源
这里让你选择是否创建新用户,是否SSH登录,是否使用key登录。
按照上图设置就完成了
输入
vi /etc/apk/repositories
把非科大源的2行加上#注释掉 保存退出
输入apk update
更新下
安装软件
这里安装几个软件:
apk add curl wget nano docker
apk add
加上你要安装的软件包名称就可以了,相当于debian上的 apt install
比如我这里安装的就是curl wget docker
rc-update add docker boot #开机自启动
service docker start #启动docker服务
启动后docker -v
查看下是否正常
安装homeassistant
docker安装完了,就可以按照官方的方法安装homeassistant了
docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=Asia/Shanghai \
-v /root/HomeAssistant:/config \
-v /run/dbus:/run/dbus:ro \
--network=host \
ghcr.io/home-assistant/home-assistant:stable
/root/HomeAssistant
和Asia/Shanghai
改成你自己的路径和时区。
更新方法
重新拉取镜像
docker pull ghcr.io/home-assistant/home-assistant:stable
停止容器
docker stop homeassistant
删除容器
docker rm homeassistant
重新创建(路径必须和之前创建的一致):
docker run -d \
--name homeassistant \
--restart=unless-stopped \
--privileged \
-e TZ=Asia/Shanghai \
-v /root/HomeAssistant:/config \
-v /run/dbus:/run/dbus:ro \
--network=host \
ghcr.io/home-assistant/home-assistant:stable
评论区