用了快两年了,才发现原来威联通上是可以用docker-compose的,然后docker-compose真香。
Docker/Container Station早就用上了。魔法上网、去广告、下载,大致也就这么多吧。用着是蛮爽的,但是对于版本控来说,每次升级镜像文件,都需要把docker销毁、重新拉镜像、重建实例,需要重新将很多参数(例如volumes)复制来粘贴去的,比较麻烦。
前些时候发现威联通的Container Station其实是可以自己写docker-compose文件的。今晚刚好有点时间折腾下。
目标是这样的:
- 对于魔法上网和常用软件部分,能手动分配固定IP
- 能用portainer来进行管理
Portainer
本来想直接用界面起一个portainer的,但发现它要挂载 /var/run/docker.sock
,就只好用docker-compose来写了:
version: "3"
services:
portainer:
container_name: portainer
image: portainer/portainer-ce
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /share/Container/Portainer:/data
映射出来个9000端口用于Web管理,应该就OK了。
给Docker分配固定IP
用Container Station的时候,里面有个功能比较喜欢:在「网络」部分,可以指定使用bridge,可以给这个docker分配个固定IP,这样可以把相同类别的Docker放在一块儿。但是在平常写docker-compose的时候,并没有这么干过。于是,干出事儿了……
照着docker-compose的文档,撸出来的YAML文件,提交上去,NAS挂了……完全无响应……只好重置。重置好了之后,继续试验,又挂……总之,挂了四五遍之后,终于摸索出来了。
基本概念之类的东西,见docker-compose的文档。蛮……不清晰的……😂不想看文档的话,去portainer里面自己创建个网络,看看选项都有哪些。
首先,我们需要在Container Station里面随便创建一个Container,网络类型选「Bridge」(因为只有这个可以使用自定义IP),下方选「Static IP」,然后填写IP,确定,创建Docker
然后来到Portainer,找到Networks,会发现有个「qnet-static-eth0-xxxxxx」,记下这个名字。这个是QNAP替我们创建好的网络,后面其他Container可以直接加入它。有兴趣的话可以看看里面的设置:它的Driver是很特别的 qne
t,而不是在Docker-compose里面列出的那些。并且似乎我们没办法自己创建出来一个相同的网络。
version: "3"
services:
adguard:
container_name: Adguard
image: adguard/adguardhome
volumes:
- /share/Container/Adguard/conf:/opt/adguardhome/conf
- /share/Container/Adguard/work:/opt/adguardhome/work
networks:
default:
ipv4_address: 192.168.123.101
clash:
container_name: Clash
image: dreamacro/clash-premium
volumes:
- /share/Container/Clash:/root/.config/clash
networks:
default:
ipv4_address: 192.168.123.102
networks:
default:
external: true
name: qnet-static-eth0-xxxxxx
限制资源使用量
对于jellyfin这种比较耗资源的应用,限制下CPU和Memory的使用还是很有必要的……
version: "3"
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
network_mode: "host"
volumes:
- /share/Container/Jellyfin/config:/config
- /share/Container/Jellyfin/cache:/cache
- /share/Multimedia:/media
restart: "unless-stopped" # 手动停止的话,下次重启NAS的时候不会自动启动
deploy:
# 这部分我理解为「最大分配多少」
resources:
limits:
cpus: "0.50"
memory: 512M
# 这部分我理解为「最少会分配多少」,我不太想开启
# reservations:
# cpus: "0.1"
# memory: 64M
这下子,如果需要升级镜像的话,就会方便很多:去拉一下latest,然后所有app/stack无脑重建一下就好了。
哦对了,对于docker-compose,container station 和 portainer 好像不能相互管理,即,用啥创建的,就得用啥管理……哎就这样吧~已经能方便不少了。
如果你啥啥东西搞错了……
Container Station 里面的逻辑很奇怪,就比如,如果docker-compose文件写错了导致container根本起不起来,那么你是删不掉这个app/stack的。
这个时候,就需要开启威联通的SSH模式,直接SSH进去将对应的东西干掉了。
使用admin账号,进入QNAP。
如果你是想干掉某个container,那么可以直接使用 docke
r 命令。
如果你是想管理docker-compose,那么来到 /share/CACHEDEV1_DATA/Container/container-station-data/application
/ 。你会看到,所有的app/stack都在这里了,每个app/stack是一个目录,里面有 docker-compose.ym
l文件,还有个 qnap.jso
n文件。对于运行不起来的app/stack,可以直接删除对应的文件夹,或者在这里修改 docker-compose.ym
l,直到运行起来为止。
PS:你会发现Container Station是用Python写的……(怪不得那么慢)
发表回复