3、Docker环境搭建:在树莓派上安装Docker和Docker Compose,配置镜像加速器,验证环境可用性。
好,咱们继续。上一节我们把树莓派系统跑起来了,SSH也能连上。现在要干正事了——装Docker。
为什么非要用Docker?说白了,智能家居这摊子事,依赖关系太乱了。你装个Home Assistant,它要Python 3.9;装个Mosquitto,它又要OpenSSL某个特定版本。手动折腾一圈下来,系统就成浆糊了。Docker把每个应用装进独立的小盒子,互不干扰。我个人的习惯是:能用Docker跑的,绝不直接装系统里。
3.1 一键安装Docker
树莓派是ARM架构,和咱们平时用的x86电脑不一样。好在Docker官方对ARM支持得不错。别用apt装,那个版本太老。用官方脚本最省心。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
等个一两分钟,脚本跑完就装好了。我记得第一次在树莓派3B+上跑这个脚本,等了快五分钟,那时候还是机械SD卡。现在用树莓派4或5,配合SSD,快多了。
装完把当前用户加到docker组,省得每次敲sudo:
sudo usermod -aG docker $USER
newgrp docker
嗯,这里要注意:加完组要重新登录才生效。你可以退出SSH再连一次,或者直接执行newgrp docker临时切换。
3.2 验证Docker是否装好
跑个经典hello-world容器试试:
docker run hello-world
如果看到一段欢迎信息,说明Docker能正常工作了。我曾经遇到一个坑:树莓派上跑这个命令,半天没反应。后来发现是SD卡IO瓶颈,Docker拉镜像时卡住了。换张高速卡就解决了。
再查一下版本:
docker --version
docker info | grep "Architecture"
确认Architecture显示的是aarch64或armv7l,说明架构识别正确。
3.3 安装Docker Compose
Docker Compose是管理多容器应用的利器。Home Assistant、Mosquitto、Zigbee2MQTT这几个容器,用Compose一个文件就能全部拉起。
新版Docker自带Compose插件,直接这样装:
sudo apt-get install docker-compose-plugin
验证一下:
docker compose version
如果显示Docker Compose version v2.x.x,就对了。注意是docker compose(中间没横杠),不是老版的docker-compose。
我个人建议用插件版,因为它和Docker引擎集成更好,升级也方便。
3.4 配置镜像加速器
这是国内用户绕不开的坎。Docker Hub的镜像下载速度,有时候慢得让人抓狂。我曾在项目部署时,拉一个200MB的镜像等了半小时——后来配了加速器,两分钟搞定。
编辑Docker配置文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
这里用了中科大和网易的镜像站。你也可以用阿里云的(需要登录后获取专属地址)。
改完重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
验证加速器是否生效:
docker info | grep "Registry Mirrors" -A 1
如果看到你配置的地址,说明加速器生效了。
3.5 完整验证环境
我们来跑一个完整的测试:拉一个Nginx镜像,启动容器,访问看看。
docker pull nginx:alpine
docker run -d --name test-nginx -p 8080:80 nginx:alpine
然后在浏览器里访问 http://树莓派IP:8080。看到Nginx欢迎页,就说明Docker网络、端口映射都正常。
测试完删掉这个容器:
docker stop test-nginx
docker rm test-nginx
最后检查一下Docker服务是否开机自启:
sudo systemctl is-enabled docker
如果显示enabled,就对了。不是的话手动开一下:
sudo systemctl enable docker
3.6 避坑指南
我整理了几个常见问题,你遇到了可以对照排查:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| docker run 卡住不动 | 镜像下载慢或网络不通 | 检查加速器配置,或手动ping registry-1.docker.io |
| 权限不足(permission denied) | 用户没加到docker组 | 执行 usermod 并重新登录 |
| 容器启动后马上退出 | 端口被占用或架构不兼容 | 检查端口占用,确认拉的是arm镜像 |
| docker compose 命令找不到 | Compose插件没装 | 安装 docker-compose-plugin |
我曾经在树莓派上遇到过最诡异的问题:Docker能跑,但容器里时间总不对。后来发现是树莓派没有硬件时钟,系统时间没同步。加一行timedatectl set-ntp true就解决了。
"data-root": "/mnt/ssd/docker",然后重启Docker。
好了,Docker环境搭好了。下一节我们就要正式部署Home Assistant了。到时候你会看到,有了Docker,部署一个智能家居平台就跟装个App一样简单。