群晖入门到进阶系列(七):自用Docker镜像推荐与配置

  前面我们已经讲完了 Docker 的安装与镜像加速器的配置,本文将介绍一些 Alliot 常用的镜像以及相关的配置。

前言

  命令行与群晖的 Docker 套件面板操作,各有优劣,因此,下文的内容有综合两种方式来进行。为了照顾新手,步骤描述可能比较啰嗦,老手其实只需要知道镜像名,去 dockerhub 对应的项目主页查看即可。

创建卷的挂载目录

  很多容器都会要用到卷(volume),以此来做数据的持久化。在容器里,container 内部修改的文件都会保存在 container 的可读写层中,当 container 销毁(如重建 container 等)时,那些文件就会丢失,并且,跨 container 的文件操作,在没有卷(volume)的情况下,也非常麻烦。因此,Alliot 推荐在群晖里新建一个共享目录来专门存放卷(volume)文件。
  打开群晖控制面板-共享文件夹,选择新增,如下图所配置即可:
  群晖-新建docker共享文件夹.png
  接下来我们需要将这个共享文件夹的权限放大一些,防止容器应用的权限问题(这里我直接将权限改成了最松,安全起见请勿将其他重要文件夹的目录这样配置):
  群晖-docker共享文件夹权限.png
  今后我们可以将容器卷挂载点都置于改目录下,便于管理。

某度云盘远程下载

  NAS 作为一个 7*24 小时开机的设备,最大的用处就是下载了,可惜,龟速某度云盘并没有提供群晖相关的客户端来供挂机下载。(cloudSync 属于同步而且有大小限制,不太适合某度云盘的下载),逛 Github 的时候偶然看到了一个 VNC 结合百度云盘 Linux 客户端的 Docker 镜像项目,非常适合在群晖上运行。
  项目地址: https://github.com/john-shine/Docker-CodeWeavers_CrossOver-VNC

创建

  使用 ssh 连接群晖并获取 root 权限

1
2
3
4
5
6
7
8
9
10
11
12
13
# 从远端 pull 最新 image  
docker 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 套件,可以看到我们刚才创建的容器,我们先将它停止,点击编辑:
群晖-docker百度网盘1.png
  在 “卷” 选项卡中,添加文件夹,选择下载保存的位置,装载路径为:/home/baidu/baidunetdiskdownload/ (保存位置可以自定义,装载路径必须为这个),应用,之后将该容器启动即可。

管理

  我们可以使用浏览器直接打开: http://nas的IP:6080 登录账号即可(密码为前面设置的vnc_password值):
群晖-docker百度网盘.png
  或者也可以使用 VNC 客户端(推荐 VNCVIEWER)进行连接,连接地址为: nas的IP:5901

BUG

  使用过程中发现有时候容器启动后连接 VNC,会出现卡百度网盘 LOGO 的情况,这时候我们需要使用 ssh 连接群晖并获取 root 权限 执行:

1
2
3
4
5
6
7
8
9
10
11
# 进入容器内部并开启一个 shell 
docker exec -it `docker ps|grep baidu|awk '{print $1}'` /bin/bash

# 删除数据库文件
rm -f /home/baidu/baidunetdisk/baidunetdiskdata.db

# 退出容器 shell
exit

# 重启该容器
docker restart `docker ps -a|grep baidu|awk '{print $1}'`

重新连接 VNC 即可。

Aria2NG

  aria2 是一款开源的多线程的下载工具,许多软件中都有它的身影(前面被搞的 Pandownload 也是基于 aria2 的)。而 Aria2NG 则是一个基于 aria2 的 UI 版。

创建

  首先,打开群晖 DSM 中的 Docker 套件,在 注册表 中搜索 auskadocker-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 这里选择默认,配置完成后应用,到容器里启动即可。Aria2NG-docker1.png
  打开浏览器,访问 群晖的 IP:Aria2NGWEB的端口 即可进入 Aria2NG,这里说一下一个坑,此镜像不会自动配置 Aria2 服务器的 RPC 密钥,即使是默认的 admin 也不行,所以打开 WEB 后会提示 错误 认证失败,需要手动填写先前设置的 SECRETAria2NG-docker2.png

自动更新tracker

  很多朋友说 Aria2 速度依旧很慢,这是因为没有添加 tracker 地址导致的,我们利用脚本设置从 tracklist 自动更新 Aria2NG 的 tracker:
使用 ssh 连接群晖并获取 root 权限 后,新建一个脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
!/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`" ]; then
sed -i '$a bt-tracker='${list} $CONFFILE
echo add……
else
sed -i "s@bt-tracker.*@bt-tracker=$list@g" $CONFFILE
echo update……
fi
docker restart -t=30 $DOCKERID

  运行该脚本后可以看到 aria2.conf 添加了 bt-tracker 字段即可。
登录 DSM 打开控制面板添加计划任务如下:

1
2
3
4
# 任务名随意,使用 root 用户执行  
# 计划里每天执行
# 任务设置里添加:
sh /volume1/docker/aria2/auto_tracker.sh

在 Aria2 的配置文件 aira2.conf 中,添加如下字段:

1
2
save-session-interval=30 # 30 S 保存会话
force-save=true # 强制保存

脚本运行后会提示容器意外关闭,这是因为更改 aria2 的配置文件后,脚本重启了容器以生效。

人人影视下载

  美剧爱好者肯定都知道人人影视这个软件,人人影视也有 Docker 版,并行下载能够跑满宽带。

安装

  使用 ssh 连接群晖并获取 root 权限 后,执行:

1
2
3
4
5
root@Alliot-blog:~# docker run -d --name rrshare \
-v \
-p \


Jellyfin

  Jellyfin 是 Emby 出来的一个免费版分支,与收费的 Emby 差别不大,甚至能够用旧版的 Emby 客户端来连接。在 DS918+ 系统下,Jellyfin 能够进行硬解(Emby硬解需要购买订阅)。
群晖-jellyfin1.png

安装

  要硬解的话,我们需要先看一下核显是否正常驱动了:
  使用 ssh 连接群晖并获取 root 权限 后,执行:

1
2
3
ls /dev/dri/
# 有如下输出则是有驱动
card0 renderD128

  之后,使用命令行创建容器:

1
2
3
4
5
6
7
8
9
10
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

注意:

1
2
3
4
-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”,其他默认。效果如下:
  群晖-jellyfin硬解.png
  另外一个问题就是,推荐在 Docker 套件中,将内存做限制,我目前给的 2G 限制,前几天使用 jellyfin 外网看电影的时候,出现群晖宕机,无法 ping 通的情况,强制下电重启才恢复,估计是内存被吃满的原因,限制内存后暂时没出现这个问题(jellyfin 挺吃内存,给多少吃多少)。

解锁网易云音乐灰色歌曲

  源于这个项目 unblockneteasemusic,可以通过代理,将网易云音乐的变灰歌曲解锁。

1
2
3
4
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 权限 后,通过以下命令来运行:

1
2
# 运行一次,更新所有的容器,并清除旧的容器  
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 暂时就只有这些值得推荐给大家的了,还有更多值得尝试的镜像欢迎在博客留言补充。