目 录CONTENT

文章目录

PVE下使用LXC容器Alpine安装docker以及HomeAssistant

华灯
2024-06-02 / 0 评论 / 0 点赞 / 70 阅读 / 16630 字

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容器→选项→ 功能 里面把这些都选择上。

02

SSH连接到PVE主机 vi /etc/pve/lxc/修改一下模板文件.把这几行添加到最后保存。


lxc.apparmor.profile: unconfined

lxc.cgroup.devices.allow: a

lxc.cap.drop:

QQ截图20240528115532

初始化alpine

开机启动alpine, 进入控制台:

1

控制台输入


setup-alpine

开始初始化,按照上图来就好了,一路回车。时区那里可能会卡一下,有的人出不来,找一下网络原因。国内输入RPC就好。

3

这里是让你选择镜像源,输入 S 回车 查看

4

可以看到14是国内的清华源 15是中科大的,这里按下q退出。

5

我这里输入15选择 中科大的源

6

这里让你选择是否创建新用户,是否SSH登录,是否使用key登录。

按照上图设置就完成了

7

输入


vi /etc/apk/repositories

把非科大源的2行加上#注释掉 保存退出

输入apk update更新下

安装软件

8

这里安装几个软件:


apk add curl wget nano docker

apk add 加上你要安装的软件包名称就可以了,相当于debian上的 apt install

比如我这里安装的就是curl wget docker

9


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/HomeAssistantAsia/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

0

评论区