树莓派+Docker:从零搭建低功耗网页服务器实战指南

发布时间:2026/9/17 5:43:09
树莓派+Docker:从零搭建低功耗网页服务器实战指南 如果你手里有一块树莓派又恰好想搞明白“把网站服务跑在 Docker 里”这件事这个专栏就是为你准备的。我过去几年拿树莓派干过不少杂活跑过下载机、做过智能家居中枢、搭过内网监控面板最后发现最稳定、最省心的用法还是把它变成一台低功耗的 Docker 网页服务器。这个系列不是单纯教你敲几条命令而是从选硬件、刷系统、装 Docker、部署第一个网页服务到后面怎么维护、怎么排查完整地带你走一遍。这篇导览相当于整个专栏的地图。我会把每一阶段要解决的问题、为什么这么选、你会踩到哪些坑先梳理清楚。不管你是想交一个树莓派方向的毕设还是单纯想给自己搭个个人网站、内网服务甚至是想用 ADS-B 看飞机、接摄像头做监控这条“树莓派 Docker 网页服务”的技术路线都能复用。入门玩家可以顺着文章一步步来有经验的朋友也能直接跳到感兴趣的章节查缺补漏。1. 专栏定位为什么是“树莓派 Docker 网页服务器”1.1 这三样东西凑在一起解决了什么问题先说结论树莓派提供低功耗硬件Docker 解决环境隔离和部署一致性问题网页服务器则是最终对外提供价值的出口。很多人第一次接触树莓派会陷入“买来不知道干嘛”的尴尬。装桌面版系统、接显示器鼠标、在图形界面里点来点去折腾半天发现性能也就那样新鲜感一过就吃灰了。这个专栏想给你的是一条更务实的路线去掉桌面把树莓派当一台微型服务器用。它一年电费可能不到二十块钱却能 7x24 小时挂着你的博客、导航页、监控面板、消息队列管理后台这些东西。Docker 解决的是“环境地狱”问题。以前在一台机器上部署 MySQL、Nginx、Redis每装一个都要处理依赖关系、版本冲突、配置文件路径搞不好还把系统搞崩。现在所有服务都打包进容器互相隔离一条命令就能启动或销毁。我自己的体会是用 Docker 之后部署服务的心理门槛大幅降低——以前遇到一个新服务会犹豫“要不要装”现在基本是“拉起一个容器试试不行就删掉重来”。这对折腾型玩家来说非常友好。网页服务器则是这一切的出口。树莓派上跑的不管是静态博客、API 接口、NAS 管理界面还是 RabbitMQ 控制台最终都是通过浏览器来访问的。整个专栏都围绕“怎么把服务跑起来、怎么从网页访问到、怎么管理”展开而不是停留在“我装了个软件”的层面。1.2 适合什么人看这篇导览这个专栏的受众我大致分成三类。第一类是正在做毕设或课程项目的学生。热词里“树莓派毕设”出现频率很高我猜不少人正愁选题和实现方案。树莓派 Docker 这套组合非常适合做边缘计算、物联网数据采集、内网服务管理等方向的题目因为它的技术栈成熟、方案可复制、演示效果好。比如你可以做一个“基于树莓派的实验室环境监控系统”用 Docker 部署数据库和后端服务前端网页实时展示温湿度数据这一套下来工作量饱满技术含量也有。第二类是刚开始玩树莓派的小白。你可能刚买了一块 Pi 4B 或者 Pi 5正在搜“树莓派烧录”“如何无屏幕安装系统”“怎么用 SSH 连接”这些基础问题。专栏前半部分会照顾这部分读者把系统安装、网络配置这些基础操作讲透。第三类是有一定 Linux 基础、想用树莓派替代部分云服务器功能的玩家。你可能已经有一台云服务器在跑 Docker想把一些非关键性服务迁移到本地省点云主机费用。树莓派作为本地节点的性价比很高你只需要把云服务器上的那套部署思维移植过来专栏后半部分的进阶内容会很对胃口。1.3 专栏的技术路线总览整个系列按项目推进的顺序分为五个阶段硬件准备与系统安装选什么型号的树莓派、烧录系统、无屏幕启动、SSH 远程登录。基础网络配置换软件源、固定 IP、防火墙基本概念。Docker 环境搭建安装 Docker Engine 与 Docker Compose理解镜像和容器的关系。网页服务实战部署从静态 Nginx 网页开始逐步过渡到动态服务再引入数据库和管理面板。运维与扩展容器日志、自启动配置、性能优化以及向摄像头、ADS-B 等领域延伸。下面我按这个路线把每个阶段的核心内容和选型思路展开讲。2. 硬件与系统准备底子不打好后面全白搭2.1 树莓派型号怎么选4B 还是 5很多人在第一步就纠结了。我的建议很直接预算允许就上树莓派 5追求性价比就选 4B且内存至少 4GB。为什么强调内存Docker 本身很轻但它跑起来的是各种实际服务。Nginx 占几十兆内存MySQL 给 512MBRedis 给 256MB再加上 Portainer 管理面板、日志收集这些辅助容器内存去得很快。我用 4B 的 2GB 版本跑过一个包含 5 个容器的项目内存长期在 85% 以上swap 频繁读写SD 卡寿命受影响。换到 4GB 版本后同样的容器组只用了大约 60% 内存负载明显下降。树莓派 5 的优势不只是性能强一截。它的 PCIe 接口可以接 NVMe 固态硬盘带宽远超 USB 接口IO 性能完全不是一回事。跑数据库这类对磁盘敏感的容器时差距非常明显。不过 Pi 5 需要主动散热原装风扇套件最好一起买否则高负载下会过热降频。还要提醒一点如果你走的是毕设路线建议优先考虑 4B 4GB。一是市场上存量多、价格稳定二是资料丰富遇到问题容易搜到解决方案。Pi 5 太新的时候一些外设兼容性坑会让你在项目中期抓狂。2.2 系统选择为什么推荐无桌面版而不是完整桌面版树莓派官方系统分为带桌面环境的 Raspberry Pi OS with Desktop 和无桌面的 Raspberry Pi OS Lite。这个专栏一律推荐 Lite 版。理由很简单服务器不需要图形界面。桌面环境至少占用 300~500MB 内存还会自动拉起一堆用不到的后台服务。我见过不少新手习惯性装了完整版然后 SSH 进去发现内存只剩一半。Lite 版干净利落安装完占用资源极少所有操作都通过 SSH 远程完成——这本身就是服务器运维的正确姿势因为真实的生产服务器都是没有桌面的。选择 Ubuntu Server 也可以但官方系统在树莓派上的驱动和内核优化最完整。比如树莓派 5 的官方系统对 PCIe SSD 的支持就是先于 Ubuntu 的。除非你有特殊需求比如要跑某个只在 Ubuntu 上做了适配的 ROS 2 包否则选官方 Lite 版最省心。需要说明的是“无桌面系统”并不意味着你没法看到网页管理界面。Docker 里的服务自带网页 UI比如 Portainer 的仪表盘、RabbitMQ 的管理控制台这些都是在浏览器里打开的跟树莓派上有没有桌面无关。你只需要在浏览器地址栏输入树莓派的 IP 和端口即可。2.3 烧录与启动一次把配置做完整的技巧烧录系统推荐用官方的 Raspberry Pi Imager。很多人不知道这个工具有个隐藏但极其实用的功能在烧录前按住 CtrlShiftXmacOS 是 CmdShiftX可以打开高级设置菜单提前配置主机名、开启 SSH、设置 Wi-Fi 和用户名密码。这就意味着你可以做到“无屏幕安装”烧录完 SD 卡插卡上电等一两分钟在同一局域网的另一台电脑上执行ssh 用户名树莓派IP就能进去。整个过程不需要 HDMI 线不需要键盘鼠标。具体来说我的推荐配置是主机名设为pi-server这样在同一局域网内可以直接用pi-server.local访问省去查 IP 的麻烦。开启 SSH选择“允许使用密码登录”并设置一个强密码。Wi-Fi 填家庭网络的 SSID 和密码。注意 5G 频段有时候树莓派连不上优先选 2.4G 频段测试后续再调。烧录完成后首次启动系统会自动扩展分区到整张 SD 卡。如果用的是 32GB 的卡你会发现根分区实际可用容量比初始镜像大很多。不用手工干预系统启动时已经处理好了。2.4 换源操作不出国也能享受高速下载树莓派官方软件源服务器在海外在国内网络环境下执行apt update经常很慢几十 KB/s 的速度能等得人没脾气。解决办法是换成国内镜像源。换源操作的原理是修改/etc/apt/sources.list和/etc/apt/sources.list.d/raspi.list这两个文件把默认的deb.debian.org和archive.raspberrypi.com替换成国内镜像站的地址。不同系统版本对应的源地址格式不一样树莓派 OS 的 Debian 版本是 Bookworm 或 Bullseye请先执行lsb_release -a确认自己的版本再去找对应的镜像配置。这里提个教训很多人换源后直接apt upgrade导致系统内核也一起更新了重启后出现兼容性问题。我的建议是刚做完系统时先只执行apt update和apt install安装必要工具upgrade操作放到所有基础环境确认稳定后再执行或者干脆只升级软件包不升级内核。说句实话换源这事看起来简单但因为源配置格式因版本而异网上随便复制的配置经常导致 “Release file is not valid yet” 之类的报错。稳妥的做法是去清华或阿里的镜像站页面看对应版本的官方说明照着改改完先apt update验证一下再继续。3. Docker 环境搭建把镜像、容器、卷这些概念焊死3.1 树莓派上装 Docker不是装 Docker Desktop我看到热搜词里大量出现“Docker Desktop 安装教程”“Docker Desktop 启动失败”相关内容这里必须理清一个概念Docker Desktop 是面向 Windows 和 macOS 的图形化工具它底层依赖一个 Linux 虚拟机。而树莓派本身跑的就是 Linux直接安装 Docker Engine 即可不需要虚拟机这一层也压根没有 Docker Desktop 的 ARM 版。你在 Windows 上开 Docker Desktop 遇到的问题比如 “virtualization support wasnt detected”那是 Windows 的 WSL2 或 Hyper-V 没开好跟树莓派没有任何关系。很多新手把这两件事混在一起在树莓派上照搬 Docker Desktop 的教程结果自然是一头雾水。正确的安装方式有两种。一种是执行 Docker 官方提供的自动安装脚本curl -fsSL https://get.docker.com | sh这条命令会自动检测系统架构并安装对应版本的 Docker Engine同时把当前用户加入 docker 用户组。另一种是直接apt install docker.io好处是源里就有坏处是版本可能偏旧。我个人推荐官方脚本版本更新而且对 ARM 架构的支持更好。装完执行docker version确认 Client 和 Server 两栏都有输出说明 Docker 守护进程已经正常跑起来了。如果 Server 那一栏报错多半是服务没启动执行sudo systemctl start docker再试。3.2 一个容易忽略的关键问题ARM 镜像适配这是树莓派跑 Docker 最坑的地方也是大部分人第一次翻车的地方。树莓派是 ARM 架构而很多镜像默认只提供 x86_64 版本。直接 run 一个没有 ARM 版本的镜像会得到 “exec format error”看起来像可执行文件损坏了其实根本原因是 CPU 指令集对不上。解决办法是在 Docker Hub 上搜索镜像时先确认有没有arm64或armhf标签。主流镜像基本都有多架构支持比如nginx:latest就同时有 amd64 和 arm64 版本。从官网拉镜像时它会在同一个 tag 下自动匹配架构版本但前提是这个镜像的维护者发布了对应的变体。怎么判断一个镜像支不支持树莓派最直接的方法是在 Docker Hub 的 “Tags” 页面查看描述中是否包含 arm64。还有一个土办法直接docker pull到本机然后用docker inspect 镜像名 | grep Architecture查看该镜像的架构信息。如果是像 homeassistant 这种平台相关性极强的镜像它的文档里通常会明确写支持包括树莓派在内的哪些平台。3.3 Docker Compose你的“服务器清单”管理工具刚开始用 Docker 时你可能习惯于docker run加一堆参数来启动容器。但当你需要同时管理 Nginx、MySQL、Redis 等多个容器时这种命令行堆参数的方式就是一个灾难。Docker Compose 的价值在于它用一份 YAML 文件把多个容器的配置集中管理起来——相当于你把一套服务的“组装说明书”写在了一个文件里版本化、可复制、可评审。树莓派上安装 Compose V2 很简单。执行sudo apt install docker-compose-v2或者用官方插件方式安装。装好后在项目目录里创建一个docker-compose.yml文件写清楚每个容器的镜像、端口映射、数据卷和环境变量然后执行docker compose up -d一条命令整套服务就起来了。需要修改配置时改 YAML 文件重新up -d数据库数据放在挂载的卷里不会丢服务启动顺序也可以在文件里通过depends_on控制。这个专栏后续所有实战案例都会以 Compose 文件为组织单位。原因很简单项目的可复现性在于把“部署操作”变成“配置文件版本”你可以把整个项目目录复制到另一台树莓派上一条命令还原全部服务这才叫真正的环境一致。3.4 底层原理镜像、容器、数据卷的关系网上讲 Docker 原理的文章很多我不打算长篇大论只讲理解这套技术栈必需的三个概念。镜像可以理解为一个只读的模板文件包含着运行某个服务所需的系统环境包括基础操作系统、依赖库和应用程序代码。容器是镜像运行时的实例你可以启动、停止、删除容器但镜像本身不会变。数据卷是容器里专门用来持久化数据的目录。因为容器本身是可丢弃的——删掉重来是家常便饭——如果你不想数据跟着容器一起消失就要把容器内部的目录映射到宿主机的某个目录上。比如 MySQL 容器必须把/var/lib/mysql挂载出来否则容器一删数据库就全没了。这是新手最容易犯的错误之一跑起来没数据问题删掉容器重建数据全没了。另一个容易忽略的是网络模式。默认情况下每个容器有自己的虚拟 IP容器之间可以通过容器名互相访问。宿主机通过端口映射暴露服务时要注意端口冲突问题。同一台树莓派上一个宿主机端口只能被一个容器占用。如果发现端口明明没被谁占用却提示 busy可以用sudo ss -tlnp | grep 端口号查一下对应进程。4. 网页服务实战部署从一个能访问的页面开始4.1 第一个容器跑一个静态导航页建立信心学任何技术第一次成功跑通一件事带来的信心都很重要。Docker 的第一个实战我建议部署一个静态导航页。所谓导航页就是你打开浏览器时看到一个简洁的首页上面排列着常用的网站链接比如 GitHub、B 站、百度网盘等。创建一个项目目录放进一个index.html文件再用一行命令启动docker run -d -p 8080:80 -v /home/pi/web:/usr/share/nginx/html:ro --name nav nginx这条命令的意思是让 Nginx 容器运行在后台把宿主机的 8080 端口映射到容器的 80 端口把宿主机/home/pi/web目录挂载到容器内 Nginx 的网页根目录以只读方式挂载。之后你在浏览器访问http://树莓派IP:8080就能看到自己写的页面。为什么要先做静态页而不是直接上复杂应用因为这一步能验证整条链路系统正常、Docker 正常、端口映射正常、宿主防火墙放行、客户端能访问到。这些基础能力一旦确认可以复用后面部署任何服务都只是配置不同的容器而已。改动网页内容时不需要重启容器因为网页文件是从宿主机挂载进去的直接刷新浏览器就能看到变化。这个体验对新手来说很友好而且引出数据卷的概念非常直观。4.2 加入管理面板用 Portainer 在网页上管理 Docker装了 Docker 之后你会发现自己经常要在命令行敲docker ps、docker logs这些命令。对熟悉命令行的人来说没问题但对很多想做毕设或者轻度运维的朋友来说有个可视化管理界面会更舒服。Portainer 就是干这个的。Portainer 本身也是一个 Docker 容器部署方式非常简单services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always ports: - 9000:9000 volumes: - /var/run/docker.sock:/var/run/docker.sock command: -H unix:///var/run/docker.sock核心就在docker.sock这个挂载上。Portainer 通过访问宿主机 Docker 守护进程的 socket 来获取容器信息并执行操作。所以它是“管理 Docker 的容器”层级上在普通应用容器之上。部署完成后浏览器访问http://树莓派IP:9000首次访问需要设置管理员账号密码。之后你能在网页上看到所有容器的运行状态、资源占用、实时日志还可以直接点击按钮启动、停止、删除容器。这个界面让服务器的日常管理门槛大幅降低也是热词里“服务器网页如何看和管理”的一个具体答案。4.3 动态服务部署以 RabbitMQ 为例讲“管理后台怎么进”静态页面只是开胃菜动态服务才是真正值得部署的。这里我以 RabbitMQ 为例因为最近很多读者问“RabbitMQ 服务器网页如何看和管理”这个需求在消息队列使用场景里非常典型。RabbitMQ 容器部署services: rabbitmq: image: rabbitmq:3-management container_name: rabbitmq restart: always ports: - 15672:15672 - 5672:5672注意看镜像名里多了management后缀这个变体镜像内置了 Web 管理界面。15672 端口就是管理界面的入口,访问后应该能看到登录页。这里有个经典的坑RabbitMQ 默认创建的guest用户只能在 localhost 登录你在浏览器远程访问时会报错 “User can only log in via localhost”。解决方案是在容器里创建一个新管理员用户docker exec -it rabbitmq rabbitmqctl add_user myadmin mypassword docker exec -it rabbitmq rabbitmqctl set_user_tags myadmin administrator docker exec -it rabbitmq rabbitmqctl set_permissions -p / myadmin .* .* .*然后用新账号在网页登录。这一步很关键几乎每个第一次用 RabbitMQ 的人都会卡在这里。4.4 从单容器到多容器把数据库和后台服务编排起来有了前面的基础你就可以挑战一个完整的 Web 应用部署了。这里说的不是一个简单的 HTML 页面而是真正的前后端分离应用前端页面 后端 API 数据库。典型架构是一个 Compose 文件管理三个容器。后端代码通过 Dockerfile 构建成镜像MongoDB 或 MySQL 用官方镜像前端静态文件用 Nginx 容器托管。整个项目的docker-compose.yml大致框架如下services: db: image: mysql:8.0 container_name: project-db restart: always environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: appdb volumes: - ./mysql-data:/var/lib/mysql backend: build: ./backend container_name: project-backend restart: always depends_on: - db ports: - 8081:8081 frontend: image: nginx:alpine container_name: project-frontend restart: always ports: - 8080:80 volumes: - ./frontend/html:/usr/share/nginx/html这个清单代表了生产环境中非常典型的容器编排思想。数据库和后台服务不需要暴露到宿主机网络直接通过 Docker 内部网络按容器名互相访问只有前端 Nginx 映射到宿主机端口。安全性和可维护性都比你在一台裸机上逐个安装配置高得多。专栏的实战篇会拿一个完整的项目走一遍这个过程。5. 运维、访问与排查让服务器稳稳地跑 7x24 小时5.1 数据和日志最容易被忽略的两个管理对象部署服务只是开始服务器要长期稳定运行数据和日志管理必须跟上。数据方面我之前提过数据卷。每个有状态的服务数据库、消息队列、下载工具都要做目录挂载。我用一个约定俗成的目录结构管理项目~/docker/ ├── nav/ # 第一个静态页 │ └── docker-compose.yml ├── portainer/ # 管理面板 │ └── docker-compose.yml ├── rabbitmq/ # 消息队列 │ └── docker-compose.yml └── project-app/ # 完整应用 ├── docker-compose.yml ├── backend/ ├── frontend/ └── mysql-data/每个项目一个目录每个目录里有自己的 Compose 文件和数据目录。备份时只需要把这个目录结构压缩带走恢复时一条up -d拉回。日志方面Docker 容器默认输出到 stdout/stderr查看方式是docker logs 容器名。但如果不做轮转日志文件会无限增长撑满 SD 卡或硬盘。在 Compose 文件里给每个服务加段配置logging: driver: json-file options: max-size: 10m max-file: 3这样单个日志文件到 10MB 就自动轮转最多保留 3 份。这个小配置能避免绝大多数的磁盘占满事故。5.2 容器开机自启与失败重启真正的无人值守服务器要“纯无人值守”运行关键在两条配置。一是容器级别设置restart: always这个配置让容器任何时候退出都会自动拉起包括系统重启之后。遇到宿主机断电恢复Docker 服务启动后会自动启动标记为 always 的容器。二是确保 Docker 服务本身开机自启。执行sudo systemctl enable docker sudo systemctl start dockerDocker 服务本身已经是 Linux 的标准 systemd 单元默认就是开机自启的但很多精简过的系统镜像可能把这个关了。在树莓派官方系统上装完 Docker 会自动设置好这里只是提个保险。真正需要试验的是把树莓派断电重启一次然后观察docker ps是不是所有容器都自动恢复了。这个过程建议在部署阶段就验一次不要等真出问题才想起来。另外要注意restart: always有个坑如果容器因为配置错误持续不断地崩溃重启它会无限循环占用 CPU。排查时用docker inspect 容器名 | grep RestartCount看重启次数如果数字非常大大概率是容器内部程序有 bug先docker stop再慢慢查日志。5.3 防火墙与端口访问外网能访问不等于安全树莓派作为服务器端口管理早晚要面对。默认情况下树莓派系统自带 iptables 管理但多数时候你是通过路由器 NAT 上网内网服务只需要在本机监听端口即可。如果要做内网穿透或端口映射我建议先做好两件事。一是确认本机防火墙没有拦截对应端口最简单的方式是用另一台设备在同一局域网内访问测试。二是为容器里的管理类服务比如 Portainer、RabbitMQ 管理界面设置访问控制至少要用强密码最好在 Nginx 层加一层 Basic Auth 或者 IP 白名单。我必须强调不要把管理端口直接无条件暴露到公网。热词里成堆的 “docker 部署” 教程极少有人讲到这一层但这恰恰是树莓派服务器真正入门的门槛。如果你打算通过路由器端口转发对外提供服务请一定先去了解反向代理和 HTTPS 证书的概念专栏的进阶篇会专门讲 Nginx 反向代理的配置这块偷懒的代价可能是你的服务器被扫到并被爆破。5.4 常见错误速查把踩过的坑一次性交底这里整理一份速查表来自我日常帮人排查问题的经验基本覆盖了树莓派 Docker 最常见的故障现象可能原因处理方式镜像无法拉取或速度极慢网络到 Docker Hub 不稳定配置镜像加速器或使用代理环境下载后导入容器启动立即退出端口被占用或缺少必要挂载目录用docker logs 容器名看退出原因先解决日志中的错误exec format error镜像不支持 ARM 架构到 Docker Hub 确认该镜像是否有 arm64 版本重启后容器没起来容器创建时没加 restart 策略对已有容器执行docker update --restartalways 容器名网页能开但图片/样式打不开静态资源路径或端口映射问题检查 Nginx 配置里的 root 和 location 指令磁盘被占满Docker 日志或镜像残留docker system prune清理悬空资源并给 Compose 加日志轮转Portainer 无法连接本地 Dockerdocker.sock 没挂载确认 Compose 里 volumes 生效且宿主机 sock 文件存在RabbitMQ 网页密码错误默认 guest 无法远程登录按前文命令创建新管理员用户这个速查表以后会在专栏的问答篇里持续更新。遇到问题不要慌先看日志再拆配置大部分故障都是这两步解决的。6. 从这里还能延伸出什么摄像头、ADS-B、毕业设计6.1 把树莓派变成飞机雷达ADS-B 接收站我一直觉得树莓派最有魅力的特性是“低成本、低功耗、可常开”而这个特性在 ADS-B广播式自动相关监视接收站这个项目上体现得淋漓尽致。ADS-B 是飞机自动广播自身位置、高度、速度等信息的一种技术用一个几十块钱的 SDR 接收器插在树莓派上配合开源软件就能把天空中飞机的实时位置显示在你的网页上。这不就是一台有特别意义的网页服务器吗Docker 让这件事变得异常简单。社区早就有人把整套接收链路打包成了镜像比如adsbexchange或tar1090相关镜像你只要把 SDR 设备通过 USB 映射进容器配置好经纬度和站点信息打开网页就能看到雷达图能看到每架飞机的航班号、高度、速度。从树莓派上的 Docker 服务器视角来看这套东西跟跑一个 Nginx 没什么本质区别只是挂了 USB 外设。6.2 摄像头监控与智能硬件扩展热词里大量出现 “树莓派 ov5647 摄像头模块”“树莓派安装 luvcview”“树莓派 pico 控制舵机”。这些内容和我说的网页服务器路线什么关系关系在于摄像头采集、GPIO 控制这些硬件能力最终几乎都需要一个“边界服务”来对外提供接口或网页展示。我之前做过一个室内植物监控项目树莓派长时间连接摄像头定时拍照Docker 里跑一个 Python Flask 服务读取图片目录提供网页时间轴展示和浇水日志。整个项目的主体就是一个标准的 Docker 网页服务摄像头只是数据源。这就给毕设方向提供了很大想象空间。你可以做“基于树莓派的智能门禁系统”摄像头采集 后端识别 网页管理端全部用 Docker 编排。也可以做“树莓派无人值守环境监测站”传感器数据存入数据库前端网页用图表展示再叠加告警通知。这些项目的共同点硬件部分其实不复杂真正的工作量和创新点都在服务和展示层而这一层的技术栈就是本专栏一直在讲的东西。6.3 从网页服务器到智能家居中枢另一个很自然的方向是智能家居。树莓派部署 Home Assistant 已经是社区里的标准玩法而 Home Assistant 本身就能以 Docker 容器方式运行。跑到这个层面你的树莓派就同时承载了网页服务器和家庭自动化中枢两个角色。要注意的是一旦服务多了SD 卡的写入压力会明显增加。日志轮转、数据库写入、容器镜像读写都在消费 SD 卡寿命。进阶建议是有条件时把 Docker 的数据目录迁移到 USB 固态硬盘上SD 卡只放系统和引导文件。操作方法是在/etc/docker/daemon.json里指定>