前面我們已經(jīng)講完了 Docker 的安裝與鏡像加速器的配置,本文將介紹一些 Alliot 常用的鏡像以及相關(guān)的配置。
命令行與群暉的 Docker 套件面板操作,各有優(yōu)劣,因此,下文的內(nèi)容有綜合兩種方式來(lái)進(jìn)行。為了照顧新手,步驟描述可能比較啰嗦,老手其實(shí)只需要知道鏡像名,去 dockerhub 對(duì)應(yīng)的項(xiàng)目主頁(yè)查看即可。
很多容器都會(huì)要用到卷(volume),以此來(lái)做數(shù)據(jù)的持久化。在容器里,container 內(nèi)部修改的文件都會(huì)保存在 container 的可讀寫(xiě)層中,當(dāng) container 銷毀(如重建 container 等)時(shí),那些文件就會(huì)丟失,并且,跨 container 的文件操作,在沒(méi)有卷(volume)的情況下,也非常麻煩。因此,Alliot 推薦在群暉里新建一個(gè)共享目錄來(lái)專門(mén)存放卷(volume)文件。
打開(kāi)群暉控制面板-共享文件夾,選擇新增,如下圖所配置即可:
NAS 作為一個(gè) 7*24 小時(shí)開(kāi)機(jī)的設(shè)備,最大的用處就是下載了,可惜,龜速某度云盤(pán)并沒(méi)有提供群暉相關(guān)的客戶端來(lái)供掛機(jī)下載。(cloudSync 屬于同步而且有大小限制,不太適合某度云盤(pán)的下載),逛 Github 的時(shí)候偶然看到了一個(gè) VNC 結(jié)合百度云盤(pán) Linux 客戶端的 Docker 鏡像項(xiàng)目,非常適合在群暉上運(yùn)行。
項(xiàng)目地址: https://github.com/john-shine/Docker-CodeWeavers_CrossOver-VNC
12345678910111213 | # 從遠(yuǎn)端 pull 最新 imagedocker pull johnshine/baidunetdisk-crossover-vnc:latest# 從 image 創(chuàng)建 container 并運(yùn)行docker run -d \--name baidunetdisk \-p 5901:5901 \-p 6080:6080 \-e vnc_password=your_password \johnshine/baidunetdisk-crossover-vnc:latest# 上面的參數(shù)中,--name 表示容器名(可自定義),-d 表示以守護(hù)進(jìn)程運(yùn)行,-p 表示映射容器端口(前面為host端口,后面為容器端口),-e 表示環(huán)境變量# 即 映射容器的5901與6080端口到主機(jī)5901與6080端口,設(shè)置vnc密碼為your_password |
之后,我們回到 DSM 的 Docker 套件,可以看到我們剛才創(chuàng)建的容器,我們先將它停止,點(diǎn)擊編輯:
/home/baidu/baidunetdiskdownload/
(保存位置可以自定義,裝載路徑必須為這個(gè)),應(yīng)用,之后將該容器啟動(dòng)即可。 我們可以使用瀏覽器直接打開(kāi): http://nas的IP:6080
登錄賬號(hào)即可(密碼為前面設(shè)置的vnc_password值):
nas的IP:5901
使用過(guò)程中發(fā)現(xiàn)有時(shí)候容器啟動(dòng)后連接 VNC,會(huì)出現(xiàn)卡百度網(wǎng)盤(pán) LOGO 的情況,這時(shí)候我們需要使用 ssh 連接群暉并獲取 root 權(quán)限 執(zhí)行:
1234567891011 | # 進(jìn)入容器內(nèi)部并開(kāi)啟一個(gè) shelldocker exec -it `docker ps|grep baidu|awk '{print $1}'` /bin/bash# 刪除數(shù)據(jù)庫(kù)文件rm -f /home/baidu/baidunetdisk/baidunetdiskdata.db# 退出容器 shellexit# 重啟該容器docker restart `docker ps -a|grep baidu|awk '{print $1}'` |
重新連接 VNC 即可。
aria2 是一款開(kāi)源的多線程的下載工具,許多軟件中都有它的身影(前面被搞的 Pandownload 也是基于 aria2 的)。而 Aria2NG 則是一個(gè)基于 aria2 的 UI 版。
首先,打開(kāi)群暉 DSM 中的 Docker 套件,在 注冊(cè)表
中搜索 auska
的 docker-aria2
下載對(duì)應(yīng)的鏡像后,在 映像
中選擇啟動(dòng),勾選 使用高權(quán)限運(yùn)行
,端口設(shè)置里,容器端口不變,本地端口中,6800 為 Aria2 RPC 服務(wù)端口(不推薦修改),8080 為 Aria2NG WEB 服務(wù),按需修改。卷設(shè)置中,添加文件夾。創(chuàng)建一個(gè)保存配置用的文件夾,Alliot 這里為 docker/aria2
此處可按需自定義,裝載路徑則必須為 /config
,同樣的創(chuàng)建一個(gè)保存下載文件用的文件夾,Alliot 這里為 homes
按需自定義,裝載路徑必須為 /mnt
,之后再去到群暉的 File Station
,找到這些文件夾,右鍵屬性,設(shè)置 Everyone 可讀可寫(xiě)?;氐?docker 環(huán)境設(shè)置中,SECRET
變量為 Aria2 RPC 密鑰,默認(rèn)為odcn.top admin
,可按需修改,Alliot 這里選擇默認(rèn),配置完成后應(yīng)用,到容器里啟動(dòng)即可。
群暉的 IP:Aria2NGWEB的端口
即可進(jìn)入 Aria2NG,這里說(shuō)一下一個(gè)坑,此鏡像不會(huì)自動(dòng)配置 Aria2 服務(wù)器的 RPC 密鑰,即使是默認(rèn)的 admin
也不行,所以打開(kāi) WEB 后會(huì)提示 錯(cuò)誤 認(rèn)證失敗
,需要手動(dòng)填寫(xiě)先前設(shè)置的 SECRET
。 很多朋友說(shuō) Aria2 速度依舊很慢,這是因?yàn)闆](méi)有添加 tracker 地址導(dǎo)致的,我們利用腳本設(shè)置從 tracklist 自動(dòng)更新 Aria2NG 的 tracker:
使用 ssh 連接群暉并獲取 root 權(quán)限 后,新建一個(gè)腳本內(nèi)容如下:
12345678910111213 | !/bin/bash#CONFFILE 更改成你的 conf 文件真實(shí)地址CONFFILE="/volume1/docker/aria2/aria2.conf"DOCKERID="`docker ps| grep aria|awk '{print $1}'`"list=`wget -qO- https://trackerslist.com/best.txt|awk NF|sed ":a;N;s/\n/,/g;ta"`if [ -z "`grep "bt-tracker" $CONFFILE`" ]; thensed -i '$a bt-tracker='${list} $CONFFILEecho add……elsesed -i "s@bt-tracker.*@bt-tracker=$list@g" $CONFFILEecho update……fidocker restart -t=30 $DOCKERID |
運(yùn)行該腳本后可以看到 aria2.conf
添加了 bt-tracker
字段即可。
登錄 DSM 打開(kāi)控制面板添加計(jì)劃任務(wù)如下:
1234 | # 任務(wù)名隨意,使用 root 用戶執(zhí)行# 計(jì)劃里每天執(zhí)行# 任務(wù)設(shè)置里添加:sh /volume1/docker/aria2/auto_tracker.sh |
在 Aria2 的配置文件 aira2.conf 中,添加如下字段:
12 | save-session-interval=30 # 30 S 保存會(huì)話force-save=true # 強(qiáng)制保存 |
腳本運(yùn)行后會(huì)提示容器意外關(guān)閉,這是因?yàn)楦?aria2 的配置文件后,腳本重啟了容器以生效。
美劇愛(ài)好者肯定都知道人人影視這個(gè)軟件,人人影視也有 Docker 版,并行下載能夠跑滿寬帶。
使用 ssh 連接群暉并獲取 root 權(quán)限 后,執(zhí)行:
123 | root@Alliot-blog:~# docker run -d --name rrshare \-v \-p \ |
Jellyfin 是 Emby 出來(lái)的一個(gè)免費(fèi)版分支,與收費(fèi)的 Emby 差別不大,甚至能夠用舊版的 Emby 客戶端來(lái)連接。在 DS918+ 系統(tǒng)下,Jellyfin 能夠進(jìn)行硬解(Emby硬解需要購(gòu)買訂閱)。
要硬解的話,我們需要先看一下核顯是否正常驅(qū)動(dòng)了:
使用 ssh 連接群暉并獲取 root 權(quán)限 后,執(zhí)行:
123 | ls /dev/dri/# 有如下輸出則是有驅(qū)動(dòng)card0 renderD128 |
之后,使用命令行創(chuàng)建容器:
123456789 | root@Alliot-blog:~# docker run -d --name jellyfin-docker \-v /volume1/docker/jellyfin/config:/config \-v /volume1/docker/jellyfin/cache:/cache \-v /volume1/video:/video \-p 8080:8096 \-p 8081:8920 \-device=/dev/dri:/dev/dri \jellyfin/jellyfin:latest |
注意:
1234 | -v 的 `/volume1/docker/jellyfin` 需要根據(jù)你自己前面創(chuàng)建的docker共享文件夾來(lái)修改`/volume1/video` 為你影片的存放路徑-p 這里,8096 為容器的 http 端口,8920 為 https 端口,我把宿主機(jī)的8080映射給了容器的8096,之后我們可以通過(guò) http://nas的ip:8080 來(lái)訪問(wèn) Jellyfin 了-device 是將核顯設(shè)備映射給容器內(nèi)部使用,如果前面檢查沒(méi)有驅(qū)動(dòng)則不需要該字段,也無(wú)法硬解了。 |
之后瀏覽器打開(kāi) http://nas的ip:8080
,按照指引完成配置后,在 jellyfin 控制臺(tái)中的硬件加速處選擇 “VAAPI” 硬件加速,轉(zhuǎn)碼線程推薦 “4”,其他默認(rèn)。效果如下:
源于這個(gè)項(xiàng)目 unblockneteasemusic,可以通過(guò)代理,將網(wǎng)易云音樂(lè)的變灰歌曲解鎖。
1234 | root@Alliot-blog:~# docker run -d --name unblockneteasemusic \-p 666:8080 \-p 8081:8081 \nondanee/unblockneteasemusic |
打開(kāi)網(wǎng)易云音樂(lè),如圖,配置 HTTP 代理,填入群輝 IP 和上面映射的 666 端口即可(如果需要在公網(wǎng)訪問(wèn),記得去路由器里做端口轉(zhuǎn)發(fā)):
群暉-網(wǎng)易云代理
保存重啟客戶端后即可。
Docker 應(yīng)用有個(gè)很不方便的地方就是,沒(méi)有自動(dòng)檢查鏡像更新的功能,對(duì)于喜歡嘗鮮的朋友來(lái)說(shuō),上游鏡像有更新了第一時(shí)間就想要更新嘗試一下,這時(shí)候一個(gè)名為 watchtower
的應(yīng)用就出現(xiàn)了。
watchtower
是一個(gè)可以監(jiān)控正在運(yùn)行的容器鏡像是否有更新的工具,當(dāng)本地鏡像與遠(yuǎn)端鏡像有差異的時(shí)候,可以自動(dòng)使用當(dāng)前容器的運(yùn)行參數(shù)以新鏡像重新創(chuàng)建一個(gè)新的容器,并刪除舊的容器。這有點(diǎn)類似于我們手機(jī)應(yīng)用商店更新 APP 一樣。
watchtower
本身也被打包為容器鏡像,我們可以使用 ssh 連接群暉并獲取 root 權(quán)限 后,通過(guò)以下命令來(lái)運(yùn)行:
12 | # 運(yùn)行一次,更新所有的容器,并清除舊的容器docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once |
這樣我們所有的容器就會(huì)更新到遠(yuǎn)端倉(cāng)庫(kù)最新的鏡像版本了。
大致介紹一下上面的命令,我們知道 Docker 是 server+client 的架構(gòu),上述命令 -v
參數(shù)映射的 /var/run/docker.sock
就是 Docker client 與 daemon 通信的 socket 文件,watchtower
通過(guò)這個(gè)文件來(lái)監(jiān)控當(dāng)前的所有容器。
watchetower
還可以針對(duì)某一個(gè)容器進(jìn)行監(jiān)控,或是配置計(jì)劃任務(wù)定時(shí)更新甚至郵件通知等。其他更多參數(shù)見(jiàn)官網(wǎng) https://containrrr.dev/watchtower/arguments/
Alliot 暫時(shí)就只有這些值得推薦給大家的了,還有更多值得嘗試的鏡像歡迎在博客留言補(bǔ)充。
聯(lián)系客服