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

NAS Docker Compose实战手册:用YAML编排多容器应用的标准化流程

一、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场景下的优雅实践。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。