docker服務(wù)本身在前面的文章中已經(jīng)有過一次介紹,這里就不再贅述,有空的話可以看看前面docker相關(guān)的文章。
這一次我們是在linux環(huán)境內(nèi)運(yùn)行docker,將會(huì)更加的簡便。
PVE其實(shí)也是一個(gè)基于debian的linux系統(tǒng),如果你想要將docker服務(wù)直接安裝在PVE系統(tǒng)這個(gè)層級(jí)上當(dāng)然也是可以做到,但是個(gè)人不太建議這么做,一是不太方便管理,二是部分docker的服務(wù)我們還是要放到公網(wǎng)上去的,用一個(gè)LXC容器隔離一下會(huì)稍微好一點(diǎn),性能上按我的理解應(yīng)該是基本沒有損失。
一、建立lxc容器
類似于之前的一篇我們建立Nginx服務(wù)的lxc容器,前期操作是一模一樣的,這里也就不再贅述了,具體可以見之前以下這篇文章中的2創(chuàng)建用于反向代理的容器,主要說一下區(qū)別的點(diǎn),我們這個(gè)容器一定要取消無特權(quán)容器的勾選,否則后面你想要掛載nas的存儲(chǔ)系統(tǒng)是不能完成的。至于說項(xiàng)目資源的話內(nèi)存和CPU其實(shí)可以給滿,我是給了和物理機(jī)一樣的核心數(shù)以及一半的內(nèi)存,因?yàn)槲覀冎饕馁Y源的服務(wù)都在這個(gè)容器里面。然后網(wǎng)口的ipv4我們還是選擇dhcp,ipv6不要選擇,統(tǒng)一由我們之前部署的Nginx容器來完成。設(shè)置完成看到MAC地址后去我們的路由器綁定一下這臺(tái)容器的局域網(wǎng)固定IP。
創(chuàng)建完成進(jìn)行了換源和啟動(dòng)ssh之后我們關(guān)機(jī),我們還需要修改一下設(shè)置。先來到PVE的管理界面,點(diǎn)擊這臺(tái)容器,然后點(diǎn)擊中間的選項(xiàng)。雙擊功能處,把嵌套和nfs一定勾選上,SMB/CIFS可選,我是順便把他一起選上了。是否自啟動(dòng)和啟動(dòng)順序這里你可以按照你自己需求來改,我是因?yàn)镹AS啟動(dòng)太慢了所以設(shè)置了一個(gè)600s的延遲啟動(dòng)。
然后我們用WinSCP連接PVE,打開目錄/etc/pve/lxc中的你的lxc容器編號(hào).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
分別的含義是
關(guān)閉apparmor,不然根本用不了docker
允許容器訪問226:0設(shè)備,就是核顯
允許容器訪問訪問226:128設(shè)備,還是核顯,應(yīng)該是是渲染器
將主機(jī)里面的/dev/dri目錄掛載到容器內(nèi),如果主機(jī)不存在就不掛載,如果容器沒這個(gè)目錄就新建,注意后面這個(gè)dev前面沒有斜杠
其實(shí)主要就是寫第一行讓我們能用docker以及后面的三行是用來讓lxc容器可以使用核顯進(jìn)行編解碼,沒有核顯或者不用核顯就只用第一條就行。
設(shè)置完成之后我們重新打開lxc容器,進(jìn)入ssh(關(guān)機(jī)后可能又要你再去輸入一遍systemctl start ssh命令)或者控制臺(tái)輸入
ls /dev/dri
返回的內(nèi)容里面如果有了這三個(gè)東西我們lxc容器就可以使用核顯了,或者你不喜歡命令行用WinSCP去這個(gè)目錄看有沒有這三個(gè)東西也行。
by-path card0 renderD128
二、安裝docker
仍然要注意的是當(dāng)前dockerhub好像還是無法正常的訪問,我也沒辦法提供一些比較好的辦法,不過我們可以先把docker相關(guān)的組件先安裝了。
依然還是參考清華鏡像站安裝docker-ce的辦法,如果使用官網(wǎng)的網(wǎng)址庫更新可能會(huì)卡住。
由于docker的版本還是比較重要的,所以說我們還是安裝最新的版本,那么就不建議用apt的默認(rèn)庫。
首先我們先安裝依賴
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庫并安裝相關(guān)組件
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安裝完成之后可以查看下版本號(hào)確定是否安裝成功
docker -v
當(dāng)前的版本號(hào)應(yīng)該是27.0.3
然后還是到目錄/etc/docker下新建一個(gè)daemon.json,用來填一些鏡像站,雖然說現(xiàn)在沒啥能跑通的
{
"registry-mirrors": [
"鏡像1",
"鏡像2"
]
}
github上有個(gè)教程指導(dǎo)怎么自己搭建鏡像的,網(wǎng)址如下,當(dāng)然他里面有個(gè)鏈接列了第三方鏡像站列表,但是對(duì)安全性不做保障。
https://github.com/cmliu/CF-Workers-docker.io
三、掛載NAS存儲(chǔ)
由于我們的整個(gè)All in one的存儲(chǔ)都是放在NAS虛擬機(jī)上的,所以說我們需要用到的一些存儲(chǔ)目錄要掛載到這臺(tái)lxc容器上,這里我們就使用nfs掛載即可。
首先我們要確定我們的NAS上相關(guān)的數(shù)據(jù)集或者說共享文件夾已經(jīng)開啟了nfs共享并且允許我們lxc容器的IP訪問,例如說我們在truenas上設(shè)置為允許訪問的網(wǎng)絡(luò)是整個(gè)192.168.1.0/24的局域網(wǎng)網(wǎng)段,然后要記得高級(jí)設(shè)置里面的用戶的映射關(guān)系,具體可以再倒回去翻NAS安裝那一篇。
圖片
如果說你用的是其他的NAS系統(tǒng),設(shè)置上是大同小異的,只要記得為了安全一定要限制可以訪問的IP以及為了方便操作映射用戶權(quán)限或者直接選擇可讀寫即可,有的系統(tǒng)可能還有選擇是否異步的選項(xiàng),異步開啟的優(yōu)勢是響應(yīng)速度快,劣勢就是數(shù)據(jù)可能會(huì)出現(xiàn)一致性問題,看你自己選擇。
然后我們需要在lxc容器上安裝nfs相關(guān)的包
apt install nfs-common
安裝完成之后我們用WinSCP打開lxc容器里面/etc目錄下的fstab文件,按照如下格式輸入掛載的目錄,第二行是一個(gè)例子,將IP為192.168.1.11的NAS共享的/mnt/DATA0/share數(shù)據(jù)集掛載到本地/mut/nfsshare目錄。一般來說大家都把遠(yuǎn)程共享文件夾掛載在本地mnt目錄里面,當(dāng)然也隨你喜歡,記得輸入本地掛載的路徑后要去建立相應(yīng)的目錄,即像例子需要在lxc容器里新建一個(gè)/mnt/nasshare的目錄,不然會(huì)報(bào)錯(cuò)。
你的NASIP:NAS上共享文件夾的路徑 本地掛載的路徑 nfs defaults 0 0
192.168.1.11:/mnt/DATA0/share /mnt/nasshare nfs defaults 0 0
將你需要掛載的數(shù)據(jù)集或者說文件夾都填進(jìn)去之后,我們回到ssh或者控制臺(tái),輸入命令
mount -a
然后就可以用WinSCP去掛載的路徑看看掛載是否成功,里面如果傳了文件的話是不是NAS和lxc容器里面都能看到。如果說NAS是truenas等沒有方便的查看文件工具的話,可以用SMB共享到你操作的windows電腦上來看。
至此我們已經(jīng)初步完成了運(yùn)行docker服務(wù)的lxc容器的搭建,現(xiàn)在已經(jīng)可以把我們之前提到過的immich和jellyfin移植到lxc容器上了,下一篇我們再繼續(xù)說點(diǎn)其他的docker容器。
immich補(bǔ)遺
由于immich的app要和服務(wù)器版本匹配,所以網(wǎng)盤里面做了更新,另外作者在1.109版本更新了一個(gè)買license支持他的選項(xiàng),但是請務(wù)必更新到1.109.2不然就變成必須購買了
作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~
,