当你的NAS上运行了越来越多的Docker容器——Jellyfin媒体服务器、Nextcloud网盘、AdGuard广告过滤、Vaultwarden密码管理……逐个手动创建和管理容器变得繁琐且容易出错。Docker Compose的出现,让多容器应用的部署和管理变得像写配置文件一样简单优雅。本文将系统性地介绍Docker Compose在NAS环境中的实战用法。

一、Docker Compose核心概念与安装配置
Docker Compose是一个用于定义和运行多容器Docker应用的工具。通过一个YAML格式的配置文件(通常命名为docker-compose.yml),你可以声明式地定义所有服务、网络和卷,然后通过一条命令启动全部容器。相比手动执行一长串docker run命令,Compose的优势在于:配置即代码,方便版本管理和迁移;一键启停整套服务,告别遗漏;服务间自动创建专属网络,隔离安全;支持环境变量和扩展字段,复用性强。
在主流NAS系统上安装Docker Compose非常简单。群晖DSM 7.x的Container Manager套件已内置Docker Compose V2;威联通QTS通过Container Station使用Docker Compose;飞牛fnOS系统内置Docker功能,支持Compose文件直接导入;对于DIY NAS(如运行Ubuntu/Debian的系统),可通过apt install docker-compose-plugin安装V2版本,或pip install docker-compose安装V1版本。
验证安装是否成功,在终端执行docker compose version(V2)或docker-compose --version(V1),显示版本号即表示安装完成。建议统一使用V2版本,它作为Docker CLI的插件运行,与Docker Engine深度集成,性能更好。
二、YAML编写实战:从单应用到多服务编排
一个典型的NAS媒体服务栈,包含Jellyfin(媒体服务)、Traefik(反向代理)、PostgreSQL(数据库)、Redis(缓存)四个服务。使用Docker Compose编写配置文件:
version: "3.8"
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /volume1/docker/jellyfin/config:/config
- /volume1/media/movies:/data/movies
- /volume1/media/tv:/data/tvshows
- /dev/dri:/dev/dri # 硬件转码
ports:
- "8096:8096"
restart: unless-stopped
traefik:
image: traefik:v2.10
container_name: traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped将上述内容保存为docker-compose.yml,放在项目目录下,执行docker compose up -d即可启动全部服务。-d参数表示后台运行。管理命令:docker compose ps查看运行状态;docker compose logs -f查看实时日志;docker compose down停止并删除容器(数据卷不受影响)。
进阶技巧:使用.env文件管理敏感信息,避免将密码硬编码在YAML中。创建.env文件:MYSQL_ROOT_PASSWORD=yourpassword,在YAML中引用:${MYSQL_ROOT_PASSWORD}。还可以利用extends字段实现配置继承,或使用多文件叠加(docker compose -f base.yml -f override.yml up)灵活切换环境配置。
三、NAS最佳实践:目录规划与服务编排策略
在NAS上长期使用Docker Compose,合理的目录规划至关重要。推荐在NAS存储卷上创建统一的Docker根目录,每个应用一个子目录:/volume1/docker/jellyfin/存放Jellyfin的配置和Compose文件;/volume1/docker/nextcloud/存放Nextcloud相关文件。每个应用目录下都放置独立的docker-compose.yml,实现服务之间的完全解耦。
使用Portainer CE(免费版)可以可视化地管理所有Compose项目。Portainer本身也可以通过Docker Compose部署,提供直观的Web界面来查看容器状态、编辑配置、查看日志。对于NAS用户来说,Portainer是Docker Compose的最佳搭档——命令行负责批量部署,Web界面负责日常运维。
对于需要自动更新镜像的场景,可以搭配Watchtower容器使用。在全局Compose文件中加入Watchtower服务,它会定时检查并自动拉取最新镜像、重启容器。配置WATCHTOWER_CLEANUP=true可以自动清理旧镜像,释放NAS存储空间。
Docker Compose让NAS应用的部署从"手工活"变成了"配置工程"。一旦建立了标准化的Compose模板库,迁移到新NAS或重建环境时,只需复制配置文件执行docker compose up -d,整套服务在几分钟内即可恢复运行——这就是基础设施即代码(IaC)在家庭NAS场景下的优雅实践。


评论(0)