小刻也能看懂的UNRAID系统使用手册:Docker篇

DOCKER

Unraid_DockerLogo

Docker可以做什么?

通过创建共享,并在其他计算机上访问共享的方式,已经可以实现 NAS 的文件存储和访问功能了。但这仅仅是基础功能,通过 Docker 提供的各种应用和服务,我们可以把这台 Unraid NAS 服务器变成家庭影音中心、私有网络云盘、24小时在线的下载机,还可以在服务器上搭建网站、博客等。

Docker的基础知识

Docker 技术的思想来源于集装箱,正如它的图标所展示的那样,通过 Docker 技术,开发者把应用程序和所需的运行环境放到一个“集装箱”里,这些“集装箱”之间互不影响,应用程序在各自的“集装箱”里运行。通过这个技术,实现了应用程序之间互相隔离,避免了因为运行环境混乱导致的兼容问题和冲突。将环境和应用打包在一起,也免去了繁琐的环境配置时间。这让应用和服务的部署变得非常轻松。你甚至可以通过 Docker 在同一个服务器上安装多个相同的应用。

镜像 Image

开发者把应用程序和所需的运行环境打包成为一个镜像,然后发布出去,供使用者下载。镜像是用来创建容器的。类似于 ISO 格式的操作系统安装光盘,镜像被生成后无法更改其中的内容。

容器 Container

使用者下载到应用的镜像后,使用 Docker 运行,将会创建一个容器,应用在该容器里运行。

仓库 Repository

仓库是开发者发布镜像的地方,使用者可以在仓库搜索镜像,查看镜像配置参数。

Docker 官方的镜像仓库地址:https://hub.docker.com/

Docker的运行机制

在进行Docker安装配置前要了解一下Docker的运行机制:

用户从仓库下载Docker应用的镜像文件,然后通过运行命令启动Docker应用,这时,Docker引擎将通过镜像文件生成一个容器,该容器就是应用的一个运行实例。用户可以通过这种方式启动多个应用实例,默认状态下这些应用不会互相影响。当停止应用时,Docker引擎会停止容器的运行。

Docker引擎为了兼容性和稳定性的考虑,容器和容器之间,容器和主机之间默认都是互相隔离的。所以,不经过配置的话,Docker容器是无法访问主机文件系统的。为了让Docker读写主机的文件,需要卷映射(Volume Mapping)机制将主机的路径映射到容器内。比如,将宿主机存储电影的目录映射到容器内的 /data/movies 目录,这样Docker应用就可以通过容器内路径 /data/movies 访问到宿主机的电影文件了。如图所示,是Docker应用 Jellyfin 的映射表,其中映射了 config 配置文件和一些媒体文件的路径:

Unraid_Docker_VolumeMappings

Docker和虚拟机的区别

笔者刚接触 Docker 的时候,心想:这不就是虚拟机吗?!其实Docker容器技术和虚拟机技术还是有很大不同的。虚拟机技术从宿主机虚拟出一套硬件,在该硬件上安装操作系统和其他应用软件。而Docker容器技术是通过Docker引擎虚拟出一个运行环境,即容器。其应用本身直接运行在宿主机的硬件和系统下,没有经过硬件虚拟化,所以比传统虚拟机的运行效率更高。

Unraid_Docker_VMs

查看Docker设置

Unraid 系统已经集成了 Docker 环境,通过 SETTINGS >> Docker 进入 Docker 设置界面。在这里可以查看当前运行的 Docker 版本,启用或禁用 Docker。还有两个路径,是需要注意的:

Docker vDisk location

这是 Unraid 为 docker 运行创建的虚拟磁盘,安装的所有 Docker 都在该虚拟磁盘上,它默认使用 /mnt/user/system/docker/docker.img 路径,存放在 system 共享所在的磁盘上。

Default appdata storage location

这是容器内的应用数据存储的位置。在使用者安装 Docker 应用的时候,需要将 Docker 应用的配置文件路径映射到这里,否则 Docker 重启时会恢复默认设置。

安装Docker应用

Unraid 提供了两种安装 Docker 应用的方式:一种是通过 Unraid 社区应用商店(Community Applications)安装,另一种是通过 Docker 容器安装。通过社区商店安装较为简单,但为了演示 Docker 参数配置的过程,也为了后续安装一些社区商店没有的 Docker,先使用 Docker 容器进行安装。

1. 搜索 Docker 镜像

以 FileBrowser 的安装为例,FileBrowser 是一个有 WebGUI 的文件管理器,可以在线浏览服务器上的文件,支持上传下载,支持一些媒体文件的播放,功能丰富。

Unraid_DockerFBE_webGUI

首先,要去仓库里搜索 FileBrowser 镜像,访问 hub.docker.com 在搜索栏输入 FileBrowser 回车,搜索结果有很多,其中获得 Stars 数量最多的是 FileBrowser 官方的镜像,但这里我们选择 80x86/filebrowser,它是开发者荒野无灯大神制作的增强版。点进去可以看到详情页面,这里有该 Docker 的介绍和开发者写的安装说明,接下来我们需要按照这个说明去配置 Docker 的参数完成安装。

由于国内网络的不稳定,hub.docker.com 这个网站可能无法访问,这种情况可以通过修改 DNS 地址解决,比如修改为 114.114.114.114。如果修改 DNS 地址的方法无效,可以参考 Unraid中文版入门指南 中“使用Docker”部分的解决方法。

2. 阅读 Docker 说明

安装一个陌生的 Docker 时,一定要仔细阅读它的说明文档,Docker 的开发者一般会以表格的形式列出需要使用者配置的参数。在 FileBrowser 的说明文档中,很容易就找到这些参数列表,如图所示。这些参数分为下面几种类型:

Unraid_DockerFBE_Para1

Unraid_DockerFBE_Para2

Path 路径

前面介绍过 Docker 运行在容器里,容器与主机是隔离的,在容器里创建一个文件,容器外是无法访问到的,为了让 Docker 可以正常访问修改主机上的文件,需要引入 Path 路径参数。Path 参数要设置两个值,一个是容器路径,一个是主机路径。通过 Path 的设置,Docker 访问容器路径的时候就相当于访问了主机路径。

在 FileBrowser 的参数列表中,/config/myfiles 就是容器路径,作者在表格中详细描述了这两个路径的用途。

/config 是配置文件的路径,可以映射到 /mnt/user/appdata/FileBrowserEX/config 下。

/myfiles 是文件管理器根目录,可以映射到 /mnt/user/Movies/ 目录。

将应用的配置文件(config)目录映射到容器外的主机路径是很重要的,因为当用户修改Docker的配置参数或者进行了Docker升级后,Docker将从镜像文件重建容器,如果配置文件保存在容器内,则会丢失。

Port 端口映射

类似于路由器的端口映射,Port 参数也要设置两个值,一个是容器的端口,一个是主机端口。通过端口映射让主机可以访问容器。

在 FileBrowser 的参数列表中,只需要配置一个 Port 参数。

Variable 变量

变量参数的数量一般比较多,作用也各不相同,常见的有:PUID(代表用户ID),PGID(代表用户组ID),WEB_PORT(端口号)等。

注意!这里的端口号指 Docker 使用的端口号,它的类型是变量,只需要填写一个值。

而 Port 类型的端口,指端口映射,需要填写两个值。

Label 标记

暂时没有用过这种类型的参数。TBD

Device 设备

这是一个特殊的参数,指定系统中的设备文件,主要用于加载硬件驱动。

在 FileBrowser 的文档中给出了启用核显进行视频编解码的参数设置,就是利用 Device 参数添加了核显的驱动。这里暂不去配置它,后续在配置 Jellyfin 硬件解码的时候会用到。

3. 添加容器

在仔细阅读了说明文档,知道该设置哪些参数后,就可以开始安装 Docker 了。实际上,安装 Docker 就是用 Docker 的镜像生成一个容器。

  1. 通过 DOCKER >> ADD CONTAINER 进入添加容器页面
  2. Template 是模板,记录以往添加容器时填写的内容,因为这是第一次添加容器,所以没有
  3. Name 是容器名称,输入 “FileBrowserEX”
  4. Repository 是 Docker 镜像的地址,输入 “80x86/filebrowser”
  5. 然后点击 Add another Path, Port, Variable, Label or Device 链接来设置参数
  6. 需要按照 Docker 说明文档,依次添加参数,如图
  7. 全部填写完成后点击 APPLY 将开始下载镜像并创建容器
  8. 如图显示 Successfully 表示容器创建完成!

Unraid_DockerFBE_AddConfigPath

Unraid_DockerFBE_AddConfigPort

Unraid_DockerFBE_AddContainer

Unraid_DockerFBE_Pulling

4. 使用 Docker

DOCKER 页面可以看到系统中已有的容器,如图所示,列表中已经显示出刚才创建的 FileBrowserEX。在 PORT MAPPINGS(APP TO HOST) 一列显示了容器 IP 端口和主机 IP 端口的对应关系,使用浏览器访问右边的主机地址 10.0.0.110:7001 就可以打开 FileBrowserEX 的 WebGUI 页面进行使用了。

Unraid_Docker_AppList

5. Docker 高级选项

DOCKER 页面点击 FileBrowserEx 容器名称超链接,进入修改容器设置的界面,点击右上角的 BASIC VIEW(基础视图) 切换到 ADVANCED VIEW(高级视图) 在这里可以进行容器高级选项的配置。

5.1 给 Docker 添加图标

没有图标的 Docker 是没有灵魂的,在参数列表中有 Icon URL 这一项,将找到的图标网址粘贴到这里就可以给 Docker 指定漂亮的图标了。

5.2 添加快捷链接

使用 Docker 要输入 IP 地址和端口,非常麻烦,而且有时会忘记端口号。其实可以通过设置高级选项中的 WebUI 参数来给 Docker 添加一个快捷链接。

设置 WebUI 参数为 http://[IP]:[PORT:7001] 其中 “7001” 是 Docker 的主机端口号。

添加快捷链接后,可以直接点击 Docker 图标选择 WebUI 进入网页。

Unraid_Docker_AdvanceView

5.3 Extra Parameters 附加参数

附加参数是一个很容易被忽略的选项,很多作者在 Docker 发布页的参数列表上并不会列出附加参数,而是把它写在创建容器的命令里。比如在 FileBrowser 的说明文档里就没有提及附加参数这个选项,萌新可能会忽略了这个参数的填写。所以说在安装 Docker 的时候也要注意看一下它的命令行示例。

在 FileBrowser 说明文档后面,有作者写的通过命令行创建容器的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IMAGE_NAME=80x86/filebrowser 

WEB_PORT=8082
FB_AUTH_SERVER_ADDR="127.0.0.1"
mkdir -p $HOME/docker/fb/config $HOME/docker/fb/myfiles #创建文件夹的命令
podman run -d --name fb \
--restart=unless-stopped \ #附加参数:容器自动重启(这里不使用)
-e PUID=$UID \ #变量:PUID
-e PGID=$GID \ #变量:PGID
-e WEB_PORT=$WEB_PORT \ #变量:端口号
-e FB_AUTH_SERVER_ADDR=$FB_AUTH_SERVER_ADDR \ #变量:认证服务器地址(这里不使用)
-p $WEB_PORT:$WEB_PORT \ #端口映射:端口映射
-v $HOME/docker/fb/config:/config \ #路径:配置文件路径
-v $HOME/docker/fb/myfiles:/myfiles \ #路径:根目录路径
--mount type=tmpfs,destination=/tmp \ #附加参数:设置临时文件挂载点
${IMAGE_NAME}:2.9.3-amd64

笔者在代码上进行了注释,可以看出来这段命令其实和创建 Docker 容器时配置参数的过程是一样的。仔细观察可以发现命令中有两行和其他行不太一样,分别是第一行 --restart=unless-stopped 和 最后一行 --mount type=tmpfs,destination=/tmp,这两行其实就是附加参数。

第一个附加参数的意思容易理解,它是保证容器在异常退出后自动重启的。第二个参数笔者一开始也不明所以,经过查找资料,才明白它的意思,它的意思是:在系统内存中分配一个用于存储 tmp 临时文件的磁盘,并挂载到 /tmp 容器路径上。这个参数是可以提高 Docker 性能的。所以在高级视图里把这段代码粘贴到 Extra Parameters 选项里,应用设置并重建容器。

Unraid_DockerFBE_ExtraPara

Docker总结

虽然仓库中的 Docker 应用种类繁多,功能各异 ,但它们的配置方法其实和上文中的 FileBrowser 所差无几,无非是多几个需要配置的参数,所以在安装 Docker 的时候一定要仔细阅读说明文档,也要多参考网上其他作者写的教程。

Unraid 还可以通过 “Community Applications” 社区应用商店来安装 Docker,方法和上文大体相同,如果掌握了通过容器添加 Docker 的方法,那么通过社区商店安装 Docker 将触类旁通。

Community Applications

“Community Applications”(社区应用程序),包括 Unraid 社区的插件、Docker 容器和应用商城。若要安装,请转到“PLUGINS”(插件)标签页,选择“Install Plugin”(安装插件)并复制粘贴下列 URL 的其中之一:

https://gitee.com/BlueBuger/community.applications/raw/master/plugins/community.applications.plg

https://www.52help.net/ad/nas/Squidly271/community.applications/master/plugins/community.applications.plg

完成上述操作后,Unraid WebGUI 的顶部栏上方将会新增一个“APPS”(应用)选项卡。

Reference

Getting Started with Unraid (Unraid 官方指南)

Unraid | Unraid New Users Basics Blog

Unraid | Docs