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的延迟启动。

All in one(八)安装运行docker服务的lxc容器

然后我们用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安装那一篇。

All in one(八)安装运行docker服务的lxc容器图片

如果说你用的是其他的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不然就变成必须购买了

 

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。