低成本玩转鸿蒙容器的丐版方案

前言

前段时间我发布了《介绍一个容器化的鸿蒙环境》这篇文章,介绍了我制作的一个鸿蒙容器。

经过宣传,有一些用户下载体验了这个项目,我也收集到了一些反馈。其中有一项是成本问题:部分用户(例如大学生)可能没有条件去现买一个 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

有几个注意事项:

  1. 每次重启服务器都需要重新执行一遍这个命令,重新注册。
  2. 这个操作是全局生效的,不仅影响 Docker,还影响整个系统。注册完之后你可以在 x64 机器上直接执行 arm64 的二进制,无论是在 Docker 里面还是在宿主机上都是可以的。
  3. 在网络连通性方面,由于我前面装 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 的注册。

相关推荐
枕书9 小时前
实战记录:如何使用 Docker 一键部署长亭 PandaWiki 智能知识库
运维·docker·容器
键盘鼓手苏苏11 小时前
Flutter 三方库 p2plib 的鸿蒙化适配指南 - 实现高性能的端到端(P2P)加密通讯、支持分布式节点发现与去中心化数据流传输实战
flutter·harmonyos·鸿蒙·openharmony
加农炮手Jinx11 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙
加农炮手Jinx11 小时前
Flutter 组件 heart 适配鸿蒙 HarmonyOS 实战:分布式心跳监控,构建全场景保活检测与链路哨兵架构
flutter·harmonyos·鸿蒙·openharmony
钛态11 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码203511 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码203511 小时前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏11 小时前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴11 小时前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos
左手厨刀右手茼蒿11 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos