树莓派从零安装 Docker

Write Once, Run Everywhere.

今天树莓派刚刚发布了树莓派 4,以下是本次升级的主要变化:

  • A 1.5GHz quad-core 64-bit ARM Cortex-A72 CPU (~3× performance)
  • 1GB, 2GB, or 4GB of LPDDR4 SDRAM
  • Full-throughput Gigabit Ethernet
  • Dual-band 802.11ac wireless networking
  • Bluetooth 5.0
  • Two USB 3.0 and two USB 2.0 ports
  • Dual monitor support, at resolutions up to 4K
  • VideoCore VI graphics, supporting OpenGL ES 3.x
  • 4Kp60 hardware decode of HEVC video
  • Complete compatibility with earlier Raspberry Pi products

虽然真香,但想起我还在吃灰的 3B,于是打算先把 3B 用起来。那我们就从头开始吧。

树莓派是基于ARM架构的,和与PC不同。所以一些树莓派上的镜像无法在PC上运行,反之亦然。如果需要找树莓派专用的镜像,在 Dockerhub 上搜索 ARM 或 Rpi 等相关关键词即可。

我们讲解两种 docker 安装方式:

方式一:手动安装

安装环境

macOS 10.14.5
Raspberry 3B
Pi OS Version: Raspbian Buster Lite
balenaEtcher Version: 1.5.50

Step 1 下载系统

前往树莓派官网下载所需系统,由于手头只有一张 16G 的内存卡,同时为了将系统资源用在执行任务而非桌面上,因此我选择的是 Raspbian Buster Lite。

系统下载完成后,解压 zip 包,我们会得到一个后缀为 .img 的镜像包。

Step 2 烧录系统

前往 https://www.balena.io/etcher/ 下载烧录工具,该工具支持 Mac、Windows、Linux 系统(终于不用在虚拟机里处理了),接下来,打开 balenaEtcher,插入内存卡,选择上一步的 img 镜像包,点击 Flash 按钮,等待烧录完成

注意:如果直接将解压的镜像包内容拷贝到内存卡中,会出现无法安装的问题。我试了最新的两个 Lite 安装包,一个出现cma_alloc alloc failed的错误,另一个光标一直在屏幕左上角闪烁。最后通过该烧录软件顺利完成。
参考资料 https://www.youtube.com/watch?v=y5SOuBOy2ZQ

Step 3 安装系统

当烧录完成后,将内存卡弹出,然后插入树莓派,并连接 HDMI 接口的显示器与键盘。当以上工作都完成后,对树莓派进行供电,此时,系统会自动执行安装操作

当最后出现 login 时,表示系统已经安装完成。树莓派的默认用户名为 pi,密码为 raspberry。root 用户需要通过命令 sudo passwd root 激活并设置密码。

Step 4 系统设置

输入命令sudo raspi-config进入系统配置页。

此处可设置 WiFi 网络、ssh、时区等相关信息。

Step 5 安装 Docker

根据 Docker 官方文档,在树莓派中安装 docker,支持以下3种方式:

  1. 通过设置 Docker 仓库安装,该方式为 debian 的推荐安装方式,但不支持树莓派
  2. 通过下载 deb 包手动安装与升级,适用于无网络状态。
  3. 通过官方脚本安装,适用于测试与开发环境,切勿用于生产环境,且该方式仅支持树莓派安装。

海外用户可通过以下两个教程安装:

  1. https://pcmac.biz/Docker_Raspberrypi.html
  2. https://blog.docker.com/2019/03/happy-pi-day-docker-raspberry-pi/

大陆用户可通过以下教程安装:

需要注意的是,当前树莓派刚更新为 debian 最新版本 buster,但 docker 尚未支持 buster,因此当执行curl -sSL https://get.docker.com | sh时会遇到错误 E: The repository 'https://download.docker.com/linux/raspbian 10 Release' does not have a Release file.

通过输出可知,脚本获取了当前的最新版本,并写入了文件/etc/apt/sources.list.d/docker.list,但现在尚不支持最新版本,因此可以我们需要修改get-docker.sh指定脚本为可支持的版本:

$sh_c "echo \"$apt_repo\" > /etc/apt/sources.list.d/docker.list"

$sh_c "echo \"deb [arch=armhf] https://mirrors.aliyun.com/docker-ce/linux/raspbian stretch stable\" > /etc/apt/sources.list.d/docker.list"
然后验证/etc/apt/sources.list.d/docker.list的内容是否与脚本一致,一致就可以执行脚本并安装了。

经过一上午的折腾,终于成功安装了 docker!

Step 6 安装 Docker Compose

安装完 docker 后,我们还需要安装 docker compose。我们可以通过sudo apt install python-pip来安装 Python 的包管理工具,安装成功后,执行命令pip install docker-compose安装 docker compose,安装过程时间较长(可使用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose来临时使用清华 pypi 镜像源),也可能因网络原因出现多次中断的情况,请耐心等待。

注意:sudo apt install python3-pip 安装 pip3 会有很多的问题,因此我们通过安装 pip2 来解决。

方式二

使用 HypriotOS 而非树莓派官方系统。这里介绍了什么是 HypriotOS。

虽然使用该方式可以快速安装 docker 及 docker-compose,但存在一个致命的问题——WiFi 无法使用,查询了大量的资料后,都是说修改 user-data 文件的以下内容,但我发现在未启用这段代码前,使用默认的用户名和密码可以正常登陆,但启用后,即使你没有修改默认的用户名和密码,仍然无法登陆。原因未知,在经过一番折腾后,我决定弃坑了。

因为热爱,所以执着。