docker服务本身在前面的文章中已经有过一次介绍,这里就不再赘述,有空的话可以看看前面docker相关的文章。
这一次我们是在linux环境内运行docker,将会更加的简便。
PVE其实也是一个基于debian的linux系统,如果你想要将docker服务直接安装在PVE系统这个层级上当然也是可以做到,但是个人不太建议这么做,一是不太方便管理,二是部分docker的服务我们还是要放到公网上去的,用一个lxc容器隔离一下会稍微好一点,性能上按我的理解应该是基本没有损失。
一、建立lxc容器
类似于之前的一篇我们建立Nginx服务的lxc容器,前期操作是一模一样的,这里也就不再赘述了,具体可以见之前以下这篇文章中的2创建用于反向代理的容器,主要说一下区别的点,我们这个容器一定要取消无特权容器的勾选,否则后面你想要挂载NAS的存储系统是不能完成的。至于说项目资源的话内存和CPU其实可以给满,我是给了和物理机一样的核心数以及一半的内存,因为我们主要消耗资源的服务都在这个容器里面。然后网口的ipv4我们还是选择dhcp,ipv6不要选择,统一由我们之前部署的Nginx容器来完成。设置完成看到MAC地址后去我们的路由器绑定一下这台容器的局域网固定IP。
创建完成进行了换源和启动ssh之后我们关机,我们还需要修改一下设置。先来到PVE的管理界面,点击这台容器,然后点击中间的选项。双击功能处,把嵌套和nfs一定勾选上,SMB/CIFS可选,我是顺便把他一起选上了。是否自启动和启动顺序这里你可以按照你自己需求来改,我是因为NAS启动太慢了所以设置了一个600s的延迟启动。
然后我们用WinSCP连接PVE,打开目录/etc/pve/lxc中的你的lxc容器编号.conf,然后在最下面加上以下几行。
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
分别的含义是
关闭apparmor,不然根本用不了docker
允许容器访问226:0设备,就是核显
允许容器访问访问226:128设备,还是核显,应该是是渲染器
将主机里面的/dev/dri目录挂载到容器内,如果主机不存在就不挂载,如果容器没这个目录就新建,注意后面这个dev前面没有斜杠
其实主要就是写第一行让我们能用docker以及后面的三行是用来让lxc容器可以使用核显进行编解码,没有核显或者不用核显就只用第一条就行。
设置完成之后我们重新打开lxc容器,进入ssh(关机后可能又要你再去输入一遍systemctl start ssh命令)或者控制台输入
ls /dev/dri
返回的内容里面如果有了这三个东西我们lxc容器就可以使用核显了,或者你不喜欢命令行用WinSCP去这个目录看有没有这三个东西也行。
by-path card0 renderD128
二、安装docker
仍然要注意的是当前dockerhub好像还是无法正常的访问,我也没办法提供一些比较好的办法,不过我们可以先把docker相关的组件先安装了。
依然还是参考清华镜像站安装docker-ce的办法,如果使用官网的网址库更新可能会卡住。
由于docker的版本还是比较重要的,所以说我们还是安装最新的版本,那么就不建议用apt的默认库。
首先我们先安装依赖
apt install ca-certificates curl gnupg
然后新容器没有旧版本,所以直接添加docker的GPG公钥即可
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |
tee /etc/apt/sources.list.d/docker.list > /dev/null
最后再更新apt库并安装相关组件
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成之后可以查看下版本号确定是否安装成功
docker -v
当前的版本号应该是27.0.3
然后还是到目录/etc/docker下新建一个daemon.json,用来填一些镜像站,虽然说现在没啥能跑通的
{
"registry-mirrors": [
"镜像1",
"镜像2"
]
}
github上有个教程指导怎么自己搭建镜像的,网址如下,当然他里面有个链接列了第三方镜像站列表,但是对安全性不做保障。
https://github.com/cmliu/CF-Workers-docker.io
三、挂载NAS存储
由于我们的整个All in one的存储都是放在NAS虚拟机上的,所以说我们需要用到的一些存储目录要挂载到这台lxc容器上,这里我们就使用nfs挂载即可。
首先我们要确定我们的NAS上相关的数据集或者说共享文件夹已经开启了nfs共享并且允许我们lxc容器的IP访问,例如说我们在truenas上设置为允许访问的网络是整个192.168.1.0/24的局域网网段,然后要记得高级设置里面的用户的映射关系,具体可以再倒回去翻NAS安装那一篇。
图片
如果说你用的是其他的NAS系统,设置上是大同小异的,只要记得为了安全一定要限制可以访问的IP以及为了方便操作映射用户权限或者直接选择可读写即可,有的系统可能还有选择是否异步的选项,异步开启的优势是响应速度快,劣势就是数据可能会出现一致性问题,看你自己选择。
然后我们需要在lxc容器上安装nfs相关的包
apt install nfs-common
安装完成之后我们用WinSCP打开lxc容器里面/etc目录下的fstab文件,按照如下格式输入挂载的目录,第二行是一个例子,将IP为192.168.1.11的NAS共享的/mnt/DATA0/share数据集挂载到本地/mut/nfsshare目录。一般来说大家都把远程共享文件夹挂载在本地mnt目录里面,当然也随你喜欢,记得输入本地挂载的路径后要去建立相应的目录,即像例子需要在lxc容器里新建一个/mnt/nasshare的目录,不然会报错。
你的NASIP:NAS上共享文件夹的路径 本地挂载的路径 nfs defaults 0 0
192.168.1.11:/mnt/DATA0/share /mnt/nasshare nfs defaults 0 0
将你需要挂载的数据集或者说文件夹都填进去之后,我们回到ssh或者控制台,输入命令
mount -a
然后就可以用WinSCP去挂载的路径看看挂载是否成功,里面如果传了文件的话是不是NAS和lxc容器里面都能看到。如果说NAS是truenas等没有方便的查看文件工具的话,可以用SMB共享到你操作的windows电脑上来看。
至此我们已经初步完成了运行docker服务的lxc容器的搭建,现在已经可以把我们之前提到过的immich和jellyfin移植到lxc容器上了,下一篇我们再继续说点其他的docker容器。
immich补遗
由于immich的app要和服务器版本匹配,所以网盘里面做了更新,另外作者在1.109版本更新了一个买license支持他的选项,但是请务必更新到1.109.2不然就变成必须购买了
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
,