群晖入门到进阶系列(七):自用Docker镜像推荐与配置 | Alliot''s blog
前面我们已经讲完了 Docker 的安装与镜像加速器的配置,本文将介绍一些 Alliot 常用的镜像以及相关的配置。
前言
命令行与群晖的 Docker 套件面板操作,各有优劣,因此,下文的内容有综合两种方式来进行。为了照顾新手,步骤描述可能比较啰嗦,老手其实只需要知道镜像名,去 dockerhub 对应的项目主页查看即可。
创建卷的挂载目录
很多容器都会要用到卷(volume),以此来做数据的持久化。在容器里,container 内部修改的文件都会保存在 container 的可读写层中,当 container 销毁(如重建 container 等)时,那些文件就会丢失,并且,跨 container 的文件操作,在没有卷(volume)的情况下,也非常麻烦。因此,Alliot 推荐在群晖里新建一个共享目录来专门存放卷(volume)文件。
打开群晖控制面板-共享文件夹,选择新增,如下图所配置即可:
接下来我们需要将这个共享文件夹的权限放大一些,防止容器应用的权限问题(这里我直接将权限改成了最松,安全起见请勿将其他重要文件夹的目录这样配置):
今后我们可以将容器卷挂载点都置于改目录下,便于管理。
某度云盘远程下载
NAS 作为一个 7*24 小时开机的设备,最大的用处就是下载了,可惜,龟速某度云盘并没有提供群晖相关的客户端来供挂机下载。(cloudSync 属于同步而且有大小限制,不太适合某度云盘的下载),逛 Github 的时候偶然看到了一个 VNC 结合百度云盘 Linux 客户端的 Docker 镜像项目,非常适合在群晖上运行。
项目地址: https://github.com/john-shine/Docker-CodeWeavers_CrossOver-VNC
创建
12345678910111213 |
# 从远端 pull 最新 imagedocker pull johnshine/baidunetdisk-crossover-vnc:latest# 从 image 创建 container 并运行docker run -d \--name baidunetdisk \-p 5901:5901 \-p 6080:6080 \-e vnc_password=your_password \johnshine/baidunetdisk-crossover-vnc:latest# 上面的参数中,--name 表示容器名(可自定义),-d 表示以守护进程运行,-p 表示映射容器端口(前面为host端口,后面为容器端口),-e 表示环境变量# 即 映射容器的5901与6080端口到主机5901与6080端口,设置vnc密码为your_password |
之后,我们回到 DSM 的 Docker 套件,可以看到我们刚才创建的容器,我们先将它停止,点击编辑:
在 “卷” 选项卡中,添加文件夹,选择下载保存的位置,装载路径为:/home/baidu/baidunetdiskdownload/
(保存位置可以自定义,装载路径必须为这个),应用,之后将该容器启动即可。
管理
我们可以使用浏览器直接打开: http://nas的IP:6080
登录账号即可(密码为前面设置的vnc_password值):
或者也可以使用 VNC 客户端(推荐 VNCVIEWER)进行连接,连接地址为: nas的IP:5901
BUG
卡LOGO
使用过程中发现有时候容器启动后连接 VNC,会出现卡百度网盘 LOGO 的情况,这时候我们需要使用 ssh 连接群晖并获取 root 权限 执行:
1234567891011 |
# 进入容器内部并开启一个 shelldocker exec -it `docker ps|grep baidu|awk '{print $1}'` /bin/bash# 删除数据库文件rm -f /home/baidu/baidunetdisk/baidunetdiskdata.db# 退出容器 shellexit# 重启该容器docker restart `docker ps -a|grep baidu|awk '{print $1}'` |
重新连接 VNC 即可。
Aria2NG
aria2 是一款开源的多线程的下载工具,许多软件中都有它的身影(前面被搞的 Pandownload 也是基于 aria2 的)。而 Aria2NG 则是一个基于 aria2 的 UI 版。
创建
首先,打开群晖 DSM 中的 Docker 套件,在 注册表
中搜索 auska
的 docker-aria2
下载对应的镜像后,在 映像
中选择启动,勾选 使用高权限运行
,端口设置里,容器端口不变,本地端口中,6800 为 Aria2 RPC 服务端口(不推荐修改),8080 为 Aria2NG WEB 服务,按需修改。卷设置中,添加文件夹。创建一个保存配置用的文件夹,Alliot 这里为 docker/aria2
此处可按需自定义,装载路径则必须为 /config
,同样的创建一个保存下载文件用的文件夹,Alliot 这里为 homes
按需自定义,装载路径必须为 /mnt
,之后再去到群晖的 File Station
,找到这些文件夹,右键属性,设置 Everyone 可读可写。回到 docker 环境设置中,SECRET
变量为 Aria2 RPC 密钥,默认为odcn.top admin
,可按需修改,Alliot 这里选择默认,配置完成后应用,到容器里启动即可。
打开浏览器,访问 群晖的 IP:Aria2NGWEB的端口
即可进入 Aria2NG,这里说一下一个坑,此镜像不会自动配置 Aria2 服务器的 RPC 密钥,即使是默认的 admin
也不行,所以打开 WEB 后会提示 错误 认证失败
,需要手动填写先前设置的 SECRET
。
自动更新tracker
很多朋友说 Aria2 速度依旧很慢,这是因为没有添加 tracker 地址导致的,我们利用脚本设置从 tracklist 自动更新 Aria2NG 的 tracker:
使用 ssh 连接群晖并获取 root 权限 后,新建一个脚本内容如下:
12345678910111213 |
!/bin/bash#CONFFILE 更改成你的 conf 文件真实地址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 |
运行该脚本后可以看到 aria2.conf
添加了 bt-tracker
字段即可。
登录 DSM 打开控制面板添加计划任务如下:
1234 |
# 任务名随意,使用 root 用户执行# 计划里每天执行# 任务设置里添加:sh /volume1/docker/aria2/auto_tracker.sh |
在 Aria2 的配置文件 aira2.conf 中,添加如下字段:
12 |
save-session-interval=30 # 30 S 保存会话force-save=true # 强制保存 |
脚本运行后会提示容器意外关闭,这是因为更改 aria2 的配置文件后,脚本重启了容器以生效。
人人影视下载
美剧爱好者肯定都知道人人影视这个软件,人人影视也有 Docker 版,并行下载能够跑满宽带。
安装
使用 ssh 连接群晖并获取 root 权限 后,执行:
123 |
root@Alliot-blog:~# docker run -d --name rrshare \-v \-p \ |
Jellyfin
Jellyfin 是 Emby 出来的一个免费版分支,与收费的 Emby 差别不大,甚至能够用旧版的 Emby 客户端来连接。在 DS918+ 系统下,Jellyfin 能够进行硬解(Emby硬解需要购买订阅)。
安装
要硬解的话,我们需要先看一下核显是否正常驱动了:
使用 ssh 连接群晖并获取 root 权限 后,执行:
123 |
ls /dev/dri/# 有如下输出则是有驱动card0 renderD128 |
之后,使用命令行创建容器:
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` 需要根据你自己前面创建的docker共享文件夹来修改`/volume1/video` 为你影片的存放路径-p 这里,8096 为容器的 http 端口,8920 为 https 端口,我把宿主机的8080映射给了容器的8096,之后我们可以通过 http://nas的ip:8080 来访问 Jellyfin 了-device 是将核显设备映射给容器内部使用,如果前面检查没有驱动则不需要该字段,也无法硬解了。 |
之后浏览器打开 http://nas的ip:8080
,按照指引完成配置后,在 jellyfin 控制台中的硬件加速处选择 “VAAPI” 硬件加速,转码线程推荐 “4”,其他默认。效果如下:
另外一个问题就是,推荐在 Docker 套件中,将内存做限制,我目前给的 2G 限制,前几天使用 jellyfin 外网看电影的时候,出现群晖宕机,无法 ping 通的情况,强制下电重启才恢复,估计是内存被吃满的原因,限制内存后暂时没出现这个问题(jellyfin 挺吃内存,给多少吃多少)。
解锁网易云音乐灰色歌曲
源于这个项目 unblockneteasemusic,可以通过代理,将网易云音乐的变灰歌曲解锁。
1234 |
root@Alliot-blog:~# docker run -d --name unblockneteasemusic \-p 666:8080 \-p 8081:8081 \nondanee/unblockneteasemusic |
打开网易云音乐,如图,配置 HTTP 代理,填入群辉 IP 和上面映射的 666 端口即可(如果需要在公网访问,记得去路由器里做端口转发):
群晖-网易云代理
保存重启客户端后即可。
自动更新容器
Docker 应用有个很不方便的地方就是,没有自动检查镜像更新的功能,对于喜欢尝鲜的朋友来说,上游镜像有更新了第一时间就想要更新尝试一下,这时候一个名为 watchtower
的应用就出现了。
watchtower
是一个可以监控正在运行的容器镜像是否有更新的工具,当本地镜像与远端镜像有差异的时候,可以自动使用当前容器的运行参数以新镜像重新创建一个新的容器,并删除旧的容器。这有点类似于我们手机应用商店更新 APP 一样。
watchtower
本身也被打包为容器镜像,我们可以使用 ssh 连接群晖并获取 root 权限 后,通过以下命令来运行:
12 |
# 运行一次,更新所有的容器,并清除旧的容器docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once |
这样我们所有的容器就会更新到远端仓库最新的镜像版本了。
大致介绍一下上面的命令,我们知道 Docker 是 server+client 的架构,上述命令 -v
参数映射的 /var/run/docker.sock
就是 Docker client 与 daemon 通信的 socket 文件,watchtower
通过这个文件来监控当前的所有容器。
watchetower
还可以针对某一个容器进行监控,或是配置计划任务定时更新甚至邮件通知等。其他更多参数见官网 https://containrrr.dev/watchtower/arguments/
结语
Alliot 暂时就只有这些值得推荐给大家的了,还有更多值得尝试的镜像欢迎在博客留言补充。