虾米一家
分享生活,分享技术,我们一直在努力

Docker 容器化部署实战:从入门到 NAS 全场景应用指南

为什么 2026 年每个人都该学 Docker

如果你有一台 NAS、一台旧笔记本,或者任何一台 7×24 小时运行的设备,Docker 就是你释放它全部潜力的钥匙。2026 年的今天,容器化技术已经从”开发者专属”变成了”家庭用户必备”——不是因为技术本身有多炫酷,而是因为它解决了一个极其朴素的问题:如何在不同设备上一键部署任意服务,且互不干扰。

过去,你想在 NAS 上跑一个智能家居中枢,可能要折腾依赖库、配置环境、解决端口冲突。现在?一行 docker run,一切搞定。这篇文章就是为你准备的——从零基础到全场景部署,手把手带你把 Docker 玩明白。

Docker 核心概念:用大白话解释

很多教程一上来就讲”容器运行时””命名空间””cgroups”,把人劝退了。我们换个方式理解。

镜像(Image)= 菜谱

镜像是一个只读模板,里面包含了运行某个应用所需的全部文件、依赖和配置。就像菜谱一样,它告诉你”做这道菜需要什么材料、怎么操作”,但菜谱本身不是菜。

容器(Container)= 做好的菜

容器是镜像运行时的实例。同样的镜像可以启动多个容器,就像同一份菜谱可以做出多份菜。每个容器之间完全隔离,互不影响。

仓库(Registry)= 菜谱图书馆

Docker Hub 就是最大的菜谱图书馆,里面有官方维护的”经典菜谱”(如 nginx、mysql),也有社区贡献的”创意菜谱”。你可以直接拿来用,也可以自己写菜谱上传分享。

数据卷(Volume)= 冰箱

容器本身是”一次性”的——删了就没了。但你的数据不能丢。数据卷就是容器外面的存储空间,容器可以随时换,数据永远在。

NAS 上安装 Docker:三大平台全覆盖

群晖(Synology)

群晖对 Docker 的支持最友好。打开 Package Center,搜索 Container Manager(旧版叫 Docker),点击安装即可。安装完成后打开应用,你会看到一个图形化的管理界面,可以搜索镜像、创建容器、管理网络和数据卷。

如果你习惯命令行,通过 SSH 登录后可以直接使用 docker 命令,和 Linux 服务器完全一致。

威联通(QNAP)

威联通的应用中心里搜索 Container StationQ container Station 进行安装。安装后同样提供 Web 管理界面。注意:部分旧型号 NAS 需要在 Control Panel 中先启用虚拟化支持。

自组装 NAS(Ubuntu / Debian)

自组装是最灵活的方案。以下是在 Ubuntu 22.04/24.04 上的一键安装脚本:

# 使用官方一键安装脚本
curl -fsSL https://get.docker.com | sh

# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER

# 验证安装
docker --version
docker run hello-world

安装完成后建议配置镜像加速和自动启动:

# 创建 Docker 配置目录
sudo mkdir -p /etc/docker

# 配置 daemon.json
sudo tee /etc/docker/daemon.json >/dev/null <<EOF
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

# 设置开机自启
sudo systemctl enable docker
sudo systemctl restart docker

5 个实用容器部署案例

理论说完了,直接上实战。以下 5 个容器是我个人 NAS 上必装的,每个都附完整命令。

1. Home Assistant — 智能家居中枢

Home Assistant 是目前最强大的开源智能家居平台,支持超过 2000 种设备。它能把米家、HomeKit、Zigbee 等不同生态的设备统一到同一个界面管理。

docker run -d \
  --name homeassistant \
  --privileged \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -v /path/to/config:/config \
  -v /run/dbus:/run/dbus:ro \
  --network=host \
  ghcr.io/home-assistant/home-assistant:stable

部署后访问 http://你的NAS-IP:8123 即可完成初始设置。--network=host 模式让 Home Assistant 能自动发现局域网内的设备,这是推荐的网络配置方式。

关键提示:首次启动需要 5-10 分钟下载和初始化,不要急于刷新页面。配置目录建议放在 NAS 的数据盘而非系统盘,避免系统重装时丢失配置。

2. Nextcloud — 私有云盘

受够了网盘限速和隐私顾虑?Nextcloud 让你拥有完全自主的云盘服务,支持文件同步、在线编辑、日历、联系人管理,甚至还能装插件实现类似微信的文件传输功能。

# 先创建数据库容器
docker run -d \
  --name nextcloud-db \
  --restart=unless-stopped \
  -e MYSQL_ROOT_PASSWORD=你的强密码 \
  -e MYSQL_DATABASE=nextcloud \
  -e MYSQL_USER=nextcloud \
  -v /path/to/mysql:/var/lib/mysql \
  mariadb:latest

# 再创建 Nextcloud 容器
docker run -d \
  --name nextcloud \
  --restart=unless-stopped \
  -p 8080:80 \
  -v /path/to/nextcloud-data:/var/www/html/data \
  -v /path/to/nextcloud-config:/var/www/html/config \
  --link nextcloud-db:db \
  nextcloud:latest

初始化时选择 MySQL/MariaDB 作为数据库,主机填写 db(因为用了 --link),然后填入创建数据库时设置的用户名和密码。

性能优化:在 Nextcloud 的 config.php 中启用 Redis 缓存可以显著提升响应速度。用 Docker 跑一个 Redis 实例:

docker run -d \
  --name nextcloud-redis \
  --restart=unless-stopped \
  redis:alpine

3. qBittorrent — 轻量级下载器

NAS 不拿来下载太浪费了。qBittorrent 没有广告、资源占用低,还有完善的 Web UI,手机浏览器也能远程管理下载任务。

docker run -d \
  --name qbittorrent \
  --restart=unless-stopped \
  -p 8081:8080 \
  -p 6881:6881 \
  -p 6881:6881/udp \
  -e WEBUI_PORT=8080 \
  -e TZ=Asia/Shanghai \
  -v /path/to/qbittorrent-config:/config \
  -v /path/to/downloads:/downloads \
  linuxserver/qbittorrent:latest

首次登录后默认用户名 admin,密码在容器日志中查看:docker logs qbittorrent。登录后第一件事就是修改默认密码。

进阶技巧:配合 Radarr/Sonarr 容器可以实现”自动追剧”——设定好你想看的剧集,它们会自动搜索资源、调用 qBittorrent 下载、下载完成后自动整理文件名。后面我们会用 Docker Compose 一键部署这套组合。

4. Vaultwarden — 轻量级密码管理器

Bitwarden 是目前最推荐的密码管理器,但官方服务端资源占用较大。Vaultwarden 是用 Rust 重写的轻量版,内存占用从 500MB 降到 20MB,完美适合 NAS 部署。

docker run -d \
  --name vaultwarden \
  --restart=unless-stopped \
  -p 8082:80 \
  -v /path/to/vaultwarden-data:/data \
  -e TZ=Asia/Shanghai \
  vaultwarden/server:latest

部署后访问 http://你的NAS-IP:8082 注册第一个管理员账号。建议开启两步验证(2FA),并在客户端应用中配置同步地址指向你的 NAS。

安全提醒:Vaultwarden 默认不开放注册。如果你需要从外部访问,务必通过反向代理(如 Nginx Proxy Manager)配置 HTTPS,并设置强管理员密码。

5. Uptime Kuma — 监控面板

你部署了这么多服务,怎么知道它们都在正常运行?Uptime Kuma 是一个美观的自托管监控工具,支持 HTTP/TCP/Ping 等多种检测方式,还能配置 Telegram、微信、邮件等通知渠道。

docker run -d \
  --name uptime-kuma \
  --restart=unless-stopped \
  -p 8083:3001 \
  -v /path/to/kuma-data:/app/data \
  -e TZ=Asia/Shanghai \
  louislam/uptime-kuma:latest

添加监控目标时,建议至少监控以下几个:

  • 每个容器的 Web 端口(HTTP 检测)
  • NAS 本身的 Ping 可达性
  • 外部 DNS 解析(如 8.8.8.8)
  • 重要证书的到期时间

Docker Compose 进阶:一键部署多容器应用

当你需要同时运行多个有依赖关系的容器时,逐个敲 docker run 就太麻烦了。Docker Compose 让你用一个 YAML 文件定义整个应用栈,一条命令全部启动。

以下是一个完整的”家庭媒体中心”配置,包含下载器、媒体服务器和自动整理工具:

# docker-compose.yml
version: "3.8"

services:
  qbittorrent:
    image: linuxserver/qbittorrent:latest
    container_name: qbittorrent
    restart: unless-stopped
    ports:
      - "8081:8080"
      - "6881:6881"
      - "6881:6881/udp"
    environment:
      - TZ=Asia/Shanghai
      - WEBUI_PORT=8080
    volumes:
      - ./qbittorrent-config:/config
      - ./downloads:/downloads
    networks:
      - media-net

  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    ports:
      - "8096:8096"
      - "8920:8920"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./jellyfin-config:/config
      - ./jellyfin-cache:/cache
      - ./downloads:/downloads:ro
    networks:
      - media-net

  radarr:
    image: linuxserver/radarr:latest
    container_name: radarr
    restart: unless-stopped
    ports:
      - "7878:7878"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./radarr-config:/config
      - ./downloads:/downloads
    networks:
      - media-net

networks:
  media-net:
    driver: bridge

使用方式:

# 启动所有服务
docker compose up -d

# 查看运行状态
docker compose ps

# 查看日志
docker compose logs -f

# 停止所有服务
docker compose down

# 更新所有镜像
docker compose pull
docker compose up -d

目录结构建议:为每个 Compose 项目创建独立目录,配置文件和数据文件都放在项目目录下,方便备份和迁移:

~/docker/
├── media-center/
│   ├── docker-compose.yml
│   ├── downloads/
│   ├── qbittorrent-config/
│   ├── jellyfin-config/
│   └── radarr-config/
├── smart-home/
│   ├── docker-compose.yml
│   └── homeassistant-config/
└── productivity/
    ├── docker-compose.yml
    ├── nextcloud-data/
    └── vaultwarden-data/

安全最佳实践

容器化虽然方便,但安全意识不能丢。以下是我总结的 6 条铁律:

1. 最小端口暴露原则

只暴露真正需要从外部访问的端口。内部服务之间的通信通过 Docker 网络完成,不需要映射到宿主机。例如数据库容器只需要在 Docker 网络内可见,不需要 -p 参数。

2. 使用自定义网络隔离

不要把所有容器都放在默认的 bridge 网络上。按功能分组创建独立网络:

# 创建隔离网络
docker network create media-net
docker network create prod-net

# 容器加入指定网络
docker run --network media-net ...

3. 定期更新容器

容器不是”一劳永逸”的。建议每周执行一次更新检查:

# 安装 watchtower(自动更新工具)
docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --schedule "0 0 3 * * *" \
  --label-enable

上面的配置会让 Watchtower 每天凌晨 3 点自动检查并更新带有 com.centurylinklabs.watchtower.enable=true 标签的容器。

4. 限制容器资源

防止某个容器占用过多资源影响其他服务:

docker run -d \
  --memory=512m \
  --cpus=1.0 \
  --name myservice \
  myimage:latest

5. 定期备份数据卷

容器可以重建,数据不能丢。建议用 cron 定时备份:

# 备份所有 Docker 数据卷
docker run --rm \
  -v /path/to/backups:/backup \
  --volumes-from $(docker ps -aqf "name=vaultwarden") \
  alpine tar czf /backup/vaultwarden-$(date +%Y%m%d).tar.gz /data

6. 审查镜像来源

优先使用官方镜像(library/nginx)或经过验证的社区镜像(如 linuxserver/ 系列)。使用前查看镜像的 Dockerfile、下载量和最后更新时间。

常见问题排查指南

容器启动后立即退出

这是最常见的问题。排查步骤:

# 1. 查看容器日志
docker logs 容器名

# 2. 查看容器退出状态
docker inspect 容器名 | grep -i exitcode

# 3. 以前台模式运行查看实时输出
docker run -it --rm 镜像名

常见原因:环境变量配置错误、端口被占用、挂载路径不存在、权限不足。

容器内无法访问外网

通常是 DNS 解析问题。在 /etc/docker/daemon.json 中添加:

{
  "dns": ["8.8.8.8", "114.114.114.114"]
}

然后重启 Docker 服务:sudo systemctl restart docker

存储空间被 Docker 占满

容器、镜像、数据卷、日志都会占用空间。定期清理:

# 查看 Docker 磁盘占用
docker system df

# 清理未使用的资源(谨慎操作)
docker system prune -a

# 只清理停止的容器和悬空镜像
docker container prune
docker image prune

# 清理超过 100MB 的容器日志
find /var/lib/docker/containers/ -name "*.log" -size +100M -exec truncate -s 0 {} \;

数据卷权限问题

容器内进程运行的用户 ID 可能与宿主机文件所有者不匹配。解决方法:

# 查看容器内运行用户
docker exec 容器名 whoami
docker exec 容器名 id

# 修改宿主机目录权限
sudo chown -R 1000:1000 /path/to/data
sudo chmod -R 755 /path/to/data

总结与进阶学习路径

恭喜!如果你跟着这篇文章完成了所有部署,你的 NAS 已经变身为一台功能强大的家庭服务器。从智能家居到私有云盘,从自动下载到媒体中心,Docker 让你用最低的成本实现了最丰富的功能。

下一步学习建议

  1. Docker 网络进阶:学习 overlay 网络、Macvlan,实现容器跨主机通信
  2. 自定义镜像构建:用 Dockerfile 打包你自己的应用
  3. Kubernetes 入门:当容器数量超过 20 个时,考虑升级到 K3s(轻量级 K8s)
  4. CI/CD 流水线:用 GitHub Actions + Docker 实现代码自动构建和部署
  5. 监控告警体系:搭配 Prometheus + Grafana 搭建完整的监控面板

Docker 的世界远比这篇文章展示的更深更广。但记住:最好的学习方式就是动手部署。从这篇文章的 5 个案例开始,逐步扩展你的容器版图。遇到问题不要慌,docker logs 永远是你最好的朋友。

有什么部署问题或者想看的容器教程,欢迎在评论区留言。下期我们聊 Docker 网络进阶——让你的容器像专业数据中心一样互联互通。


本文作者:虾米 | 发布日期:2026 年 5 月 2 日 | 分类:技术教程

赞(0) 打赏
未经允许不得转载:虾米生活分享 » Docker 容器化部署实战:从入门到 NAS 全场景应用指南

评论 抢沙发

评论前必须登录!

 

虾米一家,生活分享!

关于我们收藏本站

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏