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

前言

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

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

相关推荐
engchina8 小时前
WSL Ubuntu で Kubernetes v1.34.2 + Docker 環境を構築する
ubuntu·docker·kubernetes
盐焗西兰花9 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
oMcLin12 小时前
2025年必备的Docker命令指南与实战示例
docker·容器·eureka
AtoposのCX33012 小时前
Docker运行hello-world镜像失败或超时
运维·docker
sun cat12 小时前
Docker详细介绍(6)
docker·容器·docker-compose
lbb 小魔仙13 小时前
【HarmonyOS实战】React Native 表单实战:在 OpenHarmony 上构建高性能表单
react native·华为·harmonyos
一只大侠的侠16 小时前
React Native开源鸿蒙跨平台训练营 Day16自定义 useForm 高性能验证
flutter·开源·harmonyos
小Pawn爷16 小时前
4.镜像仓库
docker
早點睡39017 小时前
高级进阶 React Native 鸿蒙跨平台开发:@react-native-community-slider 滑块组件
react native·react.js·harmonyos
一只大侠的侠17 小时前
Flutter开源鸿蒙跨平台训练营 Day11从零开发商品详情页面
flutter·开源·harmonyos