套件不求人,威联通Docker Compose体验及配置编写
创作立场声明:自用TS-451D体验心得,与大家分享一下。
前言
在日常工作与生活中,对于那些重复、冗杂的任务,我们常常会找寻规律,制作模板。例如excel算账,有了表格模板,只需要填入数据,即可帮助我们计算;但是在NAS使用中,我发现本来很简洁优雅的Docker,被一些教程弄得啰嗦无比。一个简单的软件安装,弄一大堆图文步骤,很多同伴们看了教程就头痛,只想找个现成的套件安装。实际上docker优点就在于简易分发和快速部署,往往docker-hub上作者早就写好了一键命令安装,却很多人不去看,以至于把简单的事情搞复杂了。
当然一个个安装软件,其实也不算高效,而Docker Compose 则让你先写好模板,然后批量运行多个Docker程序组的利器,有了它,你就能提前设定好参数,轻松把所有要用的软件装齐,并指定不同容器间的依赖关系。相信用过unraid系统的同志,可能对里面的APPS商店有些印象,其实就是一个docker的模板库。威联通也有类似的功能,但是并没有形成一套完善的商店生态?可能因为它有自己的应用商店,不想为docker添砖加瓦了。不过还好,威联通改良了Docker Compose的使用体验,让你也能通过预制模板部署应用。
一、我该怎么做?
你只需做两件事:1、编辑docker-compose.yml配置 ;2、运行docker-compose up。
别担心,你不需要像linux用户那样用ssh连接、sftp上传文件,也不用在终端中敲击命令,我发现威联通已把Docker Compose放到了网页界面,你只需复制粘贴,然后在线点一下“创建”,即可一键完成部署。下面看图:
打开Container Station,选择“创建应用程序”
好了,按照上面两图的步骤,你就能等待docker应用自行部署了,非常简单吧!部署完成的应用会显示为三个方块相叠的图标,状态为“APP”,如果有啥需要修改的地方,请点击右边倒数第二个按钮,重新修改yaml配置。
那么最重要的“yaml配置”怎么得到?下面我来简单介绍一下。
二、如何得到yaml配置
1、打开docker-hub网站
网址:https://hub.docker.com/ ,这里汇聚了全球各种docker镜像,网上很多著名开源项目都在此发布镜像以供安装。我们在左上角输入需要的软件名,例如wordpress、jellyfin,按下回车键搜索。
2、查找yaml配置
点开需要的镜像后,往下翻网页,一般中后部分会有一段docker-compose的代码,这就是我们需要复制的yaml,有的官方介绍里没有这个,可以找找第三方(例如linuxserver)制作的docker介绍。
这些配置文件很好懂吧,一眼就能看出我们需要的修改的东西,我也没学过docker-compose,是个纯新手,但是一看它就明白了。
注:许多大型项目都会给出Docker Compose的配置,但是个人开发者往往还是喜欢用命令行。如果你在项目页面只看到了docker run开头的代码,请参考我以前的一篇文章:
3、语法简介
dockers compose 需要一个定义docker服务、 网络和数据卷的 YAML 语法文件 ,开头用version: 'X.X' 定义语法版本。
image: 是我们需要拉取的docker镜像,这次用过下次部署时就不需要重新下载了,很节约时间。
container_name:是容器名,为容器指定一个名称,而不是使用默认的名称。
environment:是环境变量,非常重要,一般我们设置权限、时区、数据库、用户密码都是依靠环境变量。 有了它,你就能解放自己的鼠标,不用每次部署后一个个点击和输入,而是靠docker-compose自动设置。
volumes:是数据文件存放位置,冒号前为本地路径,冒号后为容器内路径。 本地路径可以用一个名字代替,在威联通Container Station中的存储空间里可以看到它,也可以写成绝对路径,例如/share/Container/XXX。
ports:是网络端口,冒号前是我们web访问的实际端口,冒号后是容器内的端口。
devices:主要是挂载硬件设备,例如jellyfin硬件转码就会用到/dev/dri:/dev/dri。
depends_on:解决启动顺序的问题,一般容器启动的顺序是有要求的,如果直接从上到下启动,必然会因为容器依赖问题而启动失败,使用depends_on命令可以让数据库等重要容器先运行,免得运行时出错。
extra_hosts:就是往 /etc/hosts 文件中添加一些记录,可以指定主机名对应的ip,也可以更改网站对应的ip,例如我们刮削电影时,往往会被dns污染,导致刮削失败,这时可以直接更改host解决。
三、实战演练
1、多个依赖项(seafile)。
当我们使用私有网盘时,例如kodbox,seafile时,如果想提高性能,得先设置用户名和密码,数据库(mysql地址、密码),缓存服务这些东西,如果依次安装数据库、缓存,然后又在网盘程序中设置数据、缓存,是不是感觉好麻烦?能不能直接先设置好这些东西,安装后直接用呢?当然可以,下面配置参考了seafile官方文档和威联通上实际情况编写:
version: '2.0'
services:
db:
image: mariadb
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=db_dev # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
volumes:
- /share/Container/seafile/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net
memcached:
image: memcached
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
seafile:
image: seafileltd/seafile-mc:latest
container_name: seafile
ports:
- "12401:80"
# - "12402:443" # If https is enabled, cancel the comment.
volumes:
- /share/Container/seafile/data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=db_dev # Requested, the value shuold be root's password of MySQL service.
- TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
- SEAFILE_ADMIN_EMAIL=me@example.com # Specifies Seafile admin user, default is 'me@example.com'.
- SEAFILE_ADMIN_PASSWORD=asecret # Specifies Seafile admin password, default is 'asecret'.
- SEAFILE_SERVER_LETSENCRYPT=false # Whether use letsencrypt to generate cert.
- SEAFILE_SERVER_HOSTNAME=127.0.0.1 # Specifies your host name.
depends_on:
- db
- memcached
networks:
- seafile-net
networks:
seafile-net:
我们把上面的配置文件粘贴进去,点击创建,过一会儿seafile就安装好了。数据库和缓存服务也不需要你去单独设置,甚至用户名密码也提前设置好了:用户 me@example.com 密码asecret,你也可以先改好配置文件再粘贴。
2、影音一条龙
我们在建立自己的影音库时,一般需要3类软件:管理、刮削、展示,由于威联通自带的文件浏览器有些电影格式打不开,我一般使用 filebrowser(荒野无灯大佬的镜像,支持硬解转码)浏览管理电影,tinymediamanager刮削电影,jellyfin展示电影海报墙以及转码播放。以前我是一个个安装的,而且安装好后,修改挂载路径和参数很麻烦,但是通过docker compse,不仅一次性装好这三个软件,更重要的是直接解决了硬解转码(我挂载了dri,并以管理员身份运行jellyfin),和刮削失败的问题(我为tinymediamanager添加了两条host记录,不翻墙也能连上tmdb服务器了),如果有啥要改动的地方,也能在网页端一键修改。yaml配置如下:
version: '3'
services:
jellyfin:
image: linuxserver/jellyfin
container_name: jellyfin
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
volumes:
- /share/Container/jellyfin:/config
- /share:/media
ports:
- 12501:8096
- 12502:8920
devices:
- /dev/dri:/dev/dri
extra_hosts:
- "api.themoviedb.org:13.249.146.88"
- "image.themoviedb.org:104.16.61.155"
restart: always
filebrowser:
image: 80x86/filebrowser:amd64
container_name: filebrowser
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
volumes:
- /share:/myfiles
ports:
- 12503:8082
devices:
- /dev/dri:/dev/dri
restart: always
tinymediamanager:
image: romancin/tinymediamanager:latest
container_name: tinymediamanager
environment:
- GROUP_ID=0
- USER_ID=0
- TZ=Asia/Shanghai
- ENABLE_CJK_FONT=1
volumes:
- /share/Container/tinymediamanager/config:/config
- /share:/media
ports:
- 12504:5800
- 12505:5900
extra_hosts:
- "api.themoviedb.org:13.249.146.88"
- "image.themoviedb.org:104.16.61.155"
restart: always
也是一样的方法,先粘贴yaml配置,然后点击“创建”,过一会儿3个软件都装好了,是不是很快!
秒装3个软件:filebrowser、tinymediamanager、jellyfin
总结
一直以来,NAS系统都在扩展自己的领域边界,一方面建立应用商店,打造自己的生态;一方面也在引入企业级功能,并将其包装到直观的web界面中,最著名的例子就是Docker。商店做得最好的无疑是群晖,各种第三方套件都有,而将docker包装得较好的是unraid(每个容器都能按模板轻松设置,安装好后还有图标显示)。
威联通则是多头押注,1、有官方应用商店,但一些套件介绍不去汉化,一些常用套件缺失,得靠第三方qnapclub。2、有docker+lxc环境,但功能似乎有待改进,例如安装好后不能修改挂载路径。3、有Docker Compose可导入模板,但是自带的模板只有几个,似乎并不打算多做点模板。
我希望明年再次打开Container Station时,里面能提供各色docker模板一键安装,而不是现在这样藏在角落里,等用户慢慢去探索用法。其实只要官方持续更新预制的compose,并像unraid那样附带图标,社区用户也能提供自制模板,那么威联通的docker就能变得简单易用,成为系统一大特色。















BlueBing
校验提示文案
zuoluo11
校验提示文案
daghy01
校验提示文案
红烧翅膀我喜欢吃
校验提示文案
sarie001
校验提示文案
zuoluo11
校验提示文案
zuoluo11
校验提示文案
dreamerona
校验提示文案
4mouse
校验提示文案
wangyu9210
校验提示文案
加勒比考斯
校验提示文案
colourjwh
校验提示文案
值友8734764078
校验提示文案
Frankxingu
校验提示文案
泉水里的水
校验提示文案
FX冯小旭
校验提示文案
Legionls
校验提示文案
家有_俩宝
校验提示文案
剁手一号
校验提示文案
4mouse
校验提示文案
值友6216321565
校验提示文案
灭神屠佛
校验提示文案
4mouse
校验提示文案
4mouse
校验提示文案
剁手一号
校验提示文案
家有_俩宝
校验提示文案
Legionls
校验提示文案
FX冯小旭
校验提示文案
泉水里的水
校验提示文案
dreamerona
校验提示文案
Frankxingu
校验提示文案
zuoluo11
校验提示文案
zuoluo11
校验提示文案
加勒比考斯
校验提示文案
值友8734764078
校验提示文案
daghy01
校验提示文案
BlueBing
校验提示文案
sarie001
校验提示文案
zuoluo11
校验提示文案
红烧翅膀我喜欢吃
校验提示文案