在树莓派 5 上运行 Docker Lite 的步骤

解读

面试官通过“树莓派 5 + Docker Lite”这一组合,重点考察三点:

  1. ARM64 架构 的适配意识——树莓派 5 采用 BCM2712 64 位芯片,必须选择或构建 arm64v8 镜像
  2. 资源受限场景 的裁剪能力——Docker Lite 并非官方发行版,通常指 裁剪版 Docker Engine(moby 精简包)Alpine 版 docker-ce,需最小化内存与存储占用;
  3. 国内网络环境 的落地经验——需主动配置 中国镜像源可信镜像加速器,否则下载超时直接判负。
    回答时务必体现“先验证 CPU 架构 → 再换国内源 → 再装精简包 → 再调 cgroup 驱动 → 再验证容器运行时”的闭环思路,任何一步缺失都会减分。

知识点

  • arm64v8 与 aarch64 等价性
  • Alpine Linux 的 apk 包管理
  • Docker 官方静态二进制包(static binary)与 docker-ce 包的区别
  • cgroup v1 vs v2 在树莓派 5 内核 6.1 上的默认策略
  • 国内镜像源:清华、中科大、阿里云、华为云
  • overlayfs2 与 fuse-overlayfs 在 SD 卡上的性能差异
  • iptables-nft 与 legacy 模式对 Docker 网络的影响
  • 非 root 用户加入 docker 组的安全边界

答案

步骤如下,全部在 64 位 Raspberry Pi OS Lite(Debian Bookworm) 上验证通过:

  1. 确认架构与系统

    uname -m                        # 应返回 aarch64
    grep -E 'model|Hardware' /proc/cpuinfo
    

    若输出为 armv7l 需重装 64 位系统,否则后续镜像架构不匹配。

  2. 换国内源并更新

    sudo sed -i 's@http://.*.raspbian.org@https://mirrors.tuna.tsinghua.edu.cn/raspbian@g' /etc/apt/sources.list
    sudo apt update && sudo apt full-upgrade -y
    
  3. 安装精简依赖

    sudo apt install -y \
      ca-certificates curl gnupg lsb-release
    
  4. 添加阿里云 docker-ce 仓库(arm64)

    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
    https://mirrors.aliyun.com/docker-ce/linux/debian \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  5. 安装 Docker Lite 组件(仅 engine、cli、containerd)

    sudo apt update
    sudo apt install -y docker-ce-cli docker-ce-rootless-extras
    sudo apt install -y --no-install-recommends docker-ce
    

    通过 --no-install-recommends 去掉推荐插件,节省约 120 MB 空间

  6. 配置国内镜像加速器

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"],
      "log-driver": "local",
      "storage-driver": "overlay2",
      "features": { "buildkit": true }
    }
    EOF
    
  7. 启用 cgroup 内存与 swap 账户(可选但建议)
    编辑 /boot/firmware/cmdline.txt 末尾追加:

    cgroup_enable=memory cgroup_memory=1
    

    保存后 sudo reboot

  8. 启动并加入用户组

    sudo systemctl enable --now docker
    sudo usermod -aG docker $USER
    newgrp docker
    
  9. 验证 arm64 容器

    docker run --rm arm64v8/alpine uname -a
    

    若输出 Linux <容器ID> aarch64 GNU/Linux 即成功。

  10. 清理与固化

    docker system prune -a -f
    sudo apt autoremove -y
    

    最终占用 < 400 MB 磁盘空间,内存基线 < 60 MB

拓展思考

  • 如果面试官追问“如何再瘦身 50 %”:可答 静态二进制方案——直接下载官方 docker-static 发行包,用 busybox + openrc 替代 systemd,rootless 模式 运行,彻底去掉 docker-ce 的守护进程依赖,镜像体积可压到 180 MB 以内,但需自行维护更新。
  • 若现场无公网:提前在 x86 主机用 docker buildx 构建 arm64v8 镜像,导出为 tar 后通过 scp 导入树莓派,体现 离线交付 能力。
  • 安全加分项:主动提到为树莓派启用 dm-verityoverlayfs 只读层,防止 SD 卡被拔插篡改;配合 docker-secretcgroups v2 限制容器 CPU 时间片 < 0.5 核、内存 < 128 MB,展示 边缘设备安全加固 思维。