树莓派 Docker 化网页服务器(2):从系统镜像到 Docker 底座 —— 烧录即得运行环境
前言
第1篇我们探讨了服务增长带来的两个致命问题——镜像打包的组合爆炸、单服务链路无法一步到位——并由此引入了Docker,建立了“系统镜像管底座,Docker管服务”的认知框架。
这一篇,我们来完成容器化的第一个落地实践:在旧专栏第3篇的基础上,制作一个预装Docker Engine和Docker Compose插件的纯净系统镜像。这个镜像不包含任何应用服务(Nginx、ddns-go等),只提供一个“烧录即得Docker运行环境”的底座。它是整个容器化改造的起点,也是后续所有容器得以运行的基础。
一、前置准备
沿用 旧专栏第3篇 制作的基础镜像,该镜像应当完成如下配置:
- 开启SSH
- 配置Wi-Fi或有线网络
- 设置主机名(如
jiejinx,) - 设置用户名和密码(如用户名为
pi)
建议主机名和用户名与旧专栏第3篇基础镜像保持一致,否则后续 compose 里 volume 权限会乱
将该镜像烧录到树莓派TF卡后开机,首先更新系统:
sudo apt update && sudo apt full-upgrade -y更新系统国内网络可能出现卡慢的情况,可以参考 旧专栏第4篇 的第三节 配置国内镜像源,进行配置加速。
二、Docker的安装与配置
1. 安装Docker引擎
用官方脚本安装,国内执行安装脚本网络较慢,推荐使用阿里云镜像:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun2. 安装Docker Compose插件
较新版本的Docker Engine已自带docker compose插件,验证方式:
docker compose version如果未安装,手动安装:
sudo apt install docker-compose-plugin3. 配置用户组与开机自启
将当前用户加入docker组(免sudo),设置后需完全退出SSH重新登录生效:
sudo usermod -aG docker $USER设置Docker开机自启:
sudo systemctl enable docker4. 验证安装
查看Docker版本:
docker --version
# Docker Compose插件版本
docker compose version5. 本次安装包含哪些组件
通过官方脚本 get.docker.com --mirror Aliyun 安装后,系统中会引入以下组件:
| 组件名 | 安装形式 | 用途 | 是否必需 |
|---|---|---|---|
docker-ce | apt 包 | Docker 引擎主体,负责镜像管理、容器生命周期、网络、存储驱动 | 必需 |
docker-ce-cli | apt 包 | Docker 命令行客户端(docker 命令),与引擎通过 /var/run/docker.sock 通信 | 必需 |
containerd.io | apt 包 | 底层容器运行时,真正负责镜像拉取、解包、容器进程启动;Docker 引擎把它当底层用 | 必需 |
runc | 随 containerd 附带 | OCI 运行时,真正创建容器进程、设置 namespace/cgroup | 必需(隐藏依赖) |
docker-compose-plugin | apt 包 / 独立插件 | 提供 docker compose 子命令(注意不是老版独立二进制 docker-compose) | 推荐(本专栏必需) |
docker-buildx-plugin | 部分版本随 CE 附带 | 提供 docker buildx 多架构构建能力 | 可选 |
/etc/docker/daemon.json | 手动创建 | Docker 守护进程配置(镜像源、IPv6 开关等) | 配置项 |
docker 系统组 | 安装时创建 | 加入该组的用户可免 sudo 访问 /var/run/docker.sock | 权限机制 |
说明:旧专栏里我们装 Nginx 是
apt install nginx,一个包搞定;Docker 不是“一个软件”,而是一组引擎+运行时+CLI+插件的协作体。这也是为什么底座镜像会比纯系统大 300MB+ 的原因——多出来的主要是docker-ce+containerd+ 各类 arm64 库。
6. 配置国内镜像源
国内网络环境下,直接拉取Docker Hub镜像极易超时。编辑Docker配置文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
],
"ipv6": false,
"ip6tables": false
}
EOF说明:不少国内镜像源在2024–2025年陆续停更Docker Hub同步,上面三个是2026年社区反馈仍可使用的公共源。
阿里云用户建议把自己的专属加速地址放第一个,公共源放后备
重载并重启Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker验证镜像源是否生效:
docker info | grep -A3 "Registry Mirrors"7. 拉取测试镜像
docker run --rm hello-world看到Hello from Docker!即为成功。
三、制作Docker底座系统镜像
清理Docker缓存
拉取测试镜像产生的缓存可以清掉,保持底座纯净:
docker system prune -a -f打包镜像
参考 旧专栏第3篇 的缩容和打包方法,完成含Docker底座的系统镜像制作。清理apt缓存、日志、临时文件后,关机取出存储介质,用7-zip打包成.xz格式。
注意:由于Docker引擎、containerd及Compose插件等arm64二进制文件的体积,底座镜像的压缩包大小约为900MB,相比旧专栏纯净系统镜像有所增大,这是容器化必须支付的固定成本,后续所有服务容器都将共享这个底座,不会再重复占用。
总结
本篇完成了容器化改造的第一个落地实践:
| 项目 | 完成内容 |
|---|---|
| Docker引擎 | 已安装并验证运行正常 |
| Docker Compose | 已安装插件版 |
| 国内镜像源 | 已配置三个可用镜像源 |
| 用户权限 | 已加入docker组,免sudo运行 |
| 底座镜像 | 已清理并打包成带Docker的纯净系统镜像 |
至此,你手中的树莓派已经从一个“装了特定服务的服务器”,升级为一个“烧录即得Docker运行环境”的通用底座。后续无论要跑Nginx、数据库、音乐服务还是AI模型,都不需要再重复安装Docker这一步。
下一篇预告:我们将开始容器化第一个应用组件——把旧专栏第4篇的Nginx从apt安装迁移到Docker容器运行,配置挂载、端口映射、日志管理一次到位。