原文地址: Install Docker on Raspberry Pi 64 bit version
日期: 2020-10-18
之前我已经写了一篇关于在树莓派上安装Docker和Docker Compose的文章。尽管已经有ARM处理器的Docker镜像,但是到目前为止我也没能在上面安装上MongoDB数据库。原因是最新的数据库版本不支持32位的ARM架构。从树莓派3开始已经支持64位指令,但是操作系统Raspberry Pi OS(以前称为Raspbian)是32位的。需要安装64位的Ubuntu或最新Raspberry Pi OS的64位测试版,才能拥有真实的64位计算机。
安装Raspbery Pi OS
系统目前为测试版本,所以一些特性和程序不可用或可能存在一些Bug。期待不久之后系统可以完整发布。通常使用64位系统有更好的性能并且可以寻址超过4Gb的内存,因此我认为未来ARM64版本的操作系统会用在更多的场景下。只有树莓派2和之前的版本不支持64位的指令,所以没有其它的操作系统版本可供选择。同样树莓派Zero也使用的不支持64位指令的旧处理器。
与32位系统一样,ARM64操作系统也可以下载两个版本:
- Raspberry Pi OS ARM64 full version - 完全版,包含桌面和推荐软件。可用于桌面计算机。
- Raspberry Pi OS ARM64 lite version - 精简版,不包含桌面只有基础的软件。这个版本非常适合作为服务器。
MongoDB或其他服务的镜像最好选择精简版。下载并写入到SD卡,这里不会详细介绍怎么做。具体教程可以参考raspberrypi.org
写入镜像到SD卡后,插入到树莓派3/4,连接到显示器和键盘并打开电源开关,首次载入通常比平时花费更多时间。开机后使用程序raspi-config开启SSH连接、修改主机名、设置密码并连接WIFI(服务器推荐使用更稳定的有线连接)。
如果想检查是否的确是64位而不是32位,可以通过以下命令完成:
hostnamectl
结果如下所示:
Static hostname: rpi-server64
Icon name: computer
Machine ID: 108e0507c0fb4667a9fd4378aaab455a
Boot ID: dca51c7aefe843e4820a60817e358214
Operating System: Debian GNU/Linux 10 (buster)
Kernel: Linux 5.4.51-v8+
Architecture: arm64
如你所见,架构是arm64。
检查特定的程序,可以使用以下命令获取安装路径:
which htop
结果:
/usr/bin/htop
然后可以检查程序:
file /usr/bin/htop
结果:
/usr/bin/htop: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=96abb7d508ec5511036f601725d6e5f259eff3ee, stripped
因此现在我们可以确定已经安装了64位的Raspberry Pi OS。
安装Docker
安装64位Docker的方法并不是我自己弄出来的,我在网上找到了这篇文章。本文只写了简短的描述和命令。
- 安装必须的包
sudo apt update
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
- 获取Docker签名密钥
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
- 添加Docker仓库
echo "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
- 安装Docker
sudo apt update
sudo apt install -y --no-install-recommends \
docker-ce \
cgroupfs-mount
- 最后执行以下命令启动Docker并设置为每次开机启动
sudo systemctl enable docker
sudo systemctl start docker
不幸的是安装完Docker后我不能运行hello-world镜像,因为缺少某些权限。添加权限在之前关于安装Docker的文章中有详细介绍,本文中将会再写一遍命令。
- 如果没有创建docker组需要先执行以下命令创建
sudo groupadd docker
- 添加当前用户到docker组。默认用户是pi,也可以设置成其他不同的用户
sudo gpasswd -a $USER docker
- 执行以下命令使修改生效
newgrp docker
现在就可以测试Docker和运行测试镜像了
docker run hello-world
结果应该类似这样
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
安装Docker Compose
用docker compose可以更加方便的运行多个容器,保存配置到一个yml文件。安装过程比Docker更加简单。
- 安装必须的包
sudo apt update
sudo apt install -y python3-pip libffi-dev
- 安装Docker Compose,可能需要一些时间
sudo pip3 install docker-compose
结尾
现在我们已经在64位的操作系统上安装了Docker,我们可以使用Docker Hub上64位的镜像。Arm64架构的镜像会标记为arm64或arm64/v8的tag。以MongoDB为例,类似如下
因此该镜像不止支持x86-64架构,也支持ARM64架构。64位系统为在树莓派上运行微型服务提供了更多的机会和更好的性能。