小刻也能看懂的UNRAID系统使用手册:Docker篇
小刻也能看懂的UNRAID系统使用手册:Docker篇
FrozenSkyDOCKER
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 配置文件和一些媒体文件的路径:
Docker和虚拟机的区别
笔者刚接触 Docker 的时候,心想:这不就是虚拟机吗?!其实Docker容器技术和虚拟机技术还是有很大不同的。虚拟机技术从宿主机虚拟出一套硬件,在该硬件上安装操作系统和其他应用软件。而Docker容器技术是通过Docker引擎虚拟出一个运行环境,即容器。其应用本身直接运行在宿主机的硬件和系统下,没有经过硬件虚拟化,所以比传统虚拟机的运行效率更高。
查看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 的文件管理器,可以在线浏览服务器上的文件,支持上传下载,支持一些媒体文件的播放,功能丰富。
首先,要去仓库里搜索 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 的说明文档中,很容易就找到这些参数列表,如图所示。这些参数分为下面几种类型:
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 的镜像生成一个容器。
- 通过
DOCKER >> ADD CONTAINER
进入添加容器页面 Template
是模板,记录以往添加容器时填写的内容,因为这是第一次添加容器,所以没有Name
是容器名称,输入 “FileBrowserEX”Repository
是 Docker 镜像的地址,输入 “80x86/filebrowser”- 然后点击
Add another Path, Port, Variable, Label or Device
链接来设置参数 - 需要按照 Docker 说明文档,依次添加参数,如图
- 全部填写完成后点击
APPLY
将开始下载镜像并创建容器 - 如图显示
Successfully
表示容器创建完成!
4. 使用 Docker
在 DOCKER
页面可以看到系统中已有的容器,如图所示,列表中已经显示出刚才创建的 FileBrowserEX。在 PORT MAPPINGS(APP TO HOST)
一列显示了容器 IP 端口和主机 IP 端口的对应关系,使用浏览器访问右边的主机地址 10.0.0.110:7001
就可以打开 FileBrowserEX 的 WebGUI 页面进行使用了。
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
进入网页。
5.3 Extra Parameters 附加参数
附加参数是一个很容易被忽略的选项,很多作者在 Docker 发布页的参数列表上并不会列出附加参数,而是把它写在创建容器的命令里。比如在 FileBrowser 的说明文档里就没有提及附加参数这个选项,萌新可能会忽略了这个参数的填写。所以说在安装 Docker 的时候也要注意看一下它的命令行示例。
在 FileBrowser 说明文档后面,有作者写的通过命令行创建容器的示例代码:
1 | IMAGE_NAME=80x86/filebrowser |
笔者在代码上进行了注释,可以看出来这段命令其实和创建 Docker 容器时配置参数的过程是一样的。仔细观察可以发现命令中有两行和其他行不太一样,分别是第一行 --restart=unless-stopped
和 最后一行 --mount type=tmpfs,destination=/tmp
,这两行其实就是附加参数。
第一个附加参数的意思容易理解,它是保证容器在异常退出后自动重启的。第二个参数笔者一开始也不明所以,经过查找资料,才明白它的意思,它的意思是:在系统内存中分配一个用于存储 tmp 临时文件的磁盘,并挂载到 /tmp
容器路径上。这个参数是可以提高 Docker 性能的。所以在高级视图里把这段代码粘贴到 Extra Parameters
选项里,应用设置并重建容器。
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 官方指南)