前言
前段时间我发布了《介绍一个容器化的鸿蒙环境》这篇文章,介绍了我制作的一个鸿蒙容器。
经过宣传,有一些用户下载体验了这个项目,我也收集到了一些反馈。其中有一项是成本问题:部分用户(例如大学生)可能没有条件去现买一个 arm64 服务器,或者没有条件去长时间供养它。
为了照顾到这类用户,我整理了一个"极低成本最小可用方案"(也可以说是丐版方案)。以牺牲性能为代价,可以在已有的 x64 服务器、WSL 或 Docker Desktop 里面运行这个鸿蒙容器,而无需另外购置 arm64 服务器。
x64 服务器操作流程
接下来我将使用一台位于中国大陆内(华为云 西南-贵阳一)的 Ubuntu 24.04 x64 服务器进行演示。
专门挑选这个 Region 是为了能顺便展示如何在网络条件不佳的情况下如何走通全流程,这是中国大陆内的服务器很容易遇到的问题。
1. 安装 Docker
由于我这台服务器是全新的,所以我首先要安装 Docker。
我使用(LinuxMirrors)的脚本来进行安装:
sh
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
# 以下是我做的配置
# Docker CE 源:华为云
# Docker CE 源的网络地址:公网
# Docker Registry 源:毫秒镜像
# Docker CE 软件源的网络协议:HTTP
# Docker Engine 是否安装最新版本:是
2. 注册 QEMU 解释器
接下来向 Linux 内核注册 QEMU 解释器,这能让它支持在 x64 服务器上运行 arm64 容器
sh
docker run --rm --privileged tonistiigi/binfmt --install arm64
有几个注意事项:
- 每次重启服务器都需要重新执行一遍这个命令,重新注册。
- 这个操作是全局生效的,不仅影响 Docker,还影响整个系统。注册完之后你可以在 x64 机器上直接执行 arm64 的二进制,无论是在 Docker 里面还是在宿主机上都是可以的。
- 在网络连通性方面,由于我前面装 Docker 的时候已经配了国内的 Docker Registry 源(毫秒镜像)了,所以我能够很顺利地拉取
tonistiigi/binfmt这个镜像。如果你没配 Docker Registry 源,你得稍微等久一些。如果完全无法下载,那你需要自己配一个国内的 Docker Registry 源。
3. 拉取鸿蒙容器并运行
拉取鸿蒙容器并运行
sh
docker run --name=ohos -itd --platform linux/arm64 hqzing/docker-mini-openharmony:latest
我这里的镜像名字没有填 ghcr.io/hqzing/docker-mini-openharmony:latest,而是填了 hqzing/docker-mini-openharmony:latest。
我的原始镜像是放在 ghcr(GitHub Container Registry)上面的,中国大陆内的服务器拉取这个镜像可能会很慢或不通。为了方便中国大陆内的服务器拉取,我把镜像也往 Docker Hub 传了一份,如此一来用户便可以通过国内的 Docker Registry 源来拉取到它了。
4. 下载软件体验一下
随便下载个我移植好的软件体验一下,比如 neovim 编辑器
sh
docker exec -it ohos sh
cd /root
curl -L -O https://ghfast.top/https://github.com/Harmonybrew/ohos-neovim/releases/download/0.11.4/neovim-0.11.4-ohos-arm64.tar.gz
tar -zxf neovim-0.11.4-ohos-arm64.tar.gz -C /opt
export PATH=$PATH:/opt/neovim-0.11.4-ohos-arm64/bin
# 现在可以使用 nvim 命令了
注意看,我在原始的下载链接前面加了一个 https://ghfast.top 的前缀。这是为了使用 ghfast.top 的加速下载服务,以解决中国大陆内的服务器拉取 GitHub 资源速度慢/访问不通的问题。
WSL 和 Docker Desktop
如果你用的是 WSL,就直接按 x64 服务器的流程进行操作即可,不需要做任何改动。
如果你用的是 Docker Desktop,操作流程跟上面是有一点出入,比如不用自己装 Docker、比如可以在图形界面里面换源,但运行容器的命令不变。
关于 Docker Desktop,我要提一下它的多架构镜像支持。
在正常情况下,最新版本的 Docker Desktop 默认就支持运行不同架构的镜像。它的 官方文档 是这么说的:
Docker Desktop supports running and building multi-platform images under emulation by default.
所以你可以尝试直接执行 docker run --name=ohos -itd --platform linux/arm64 hqzing/docker-mini-openharmony:latest 命令来拉起容器。我在自己的电脑上试了,确实是能正常工作的。
在不正常情况下(可能跟具体的环境或配置有关),如果你发现它在你的电脑上不支持运行 arm64 容器,那你仍需要像在服务器上一样,先执行一遍 docker run --rm --privileged tonistiigi/binfmt --install arm64 命令进行 QEMU 的注册。