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

前言

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

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

相关推荐
Van_Moonlight18 小时前
RN for OpenHarmony 实战 TodoList 项目:今日任务数量统计
javascript·开源·harmonyos
李少兄19 小时前
Kubernetes 日志管理
docker·容器·kubernetes
suamt19 小时前
记录windows下如何运行docker程序
运维·docker·容器
Van_captain19 小时前
rn_for_openharmony常用组件_Tabs选项卡
javascript·开源·harmonyos
特立独行的猫a19 小时前
低成本搭建鸿蒙PC运行环境:基于 Docker 的 x86_64 服务器
docker·容器·harmonyos·鸿蒙pc
Van_captain19 小时前
React Native for OpenHarmony Toast 轻提示组件:自动消失的操作反馈
javascript·开源·harmonyos
Van_captain19 小时前
React Native for OpenHarmony Modal 模态框组件:阻断式交互的设计与实现
javascript·开源·harmonyos
cn_mengbei20 小时前
鸿蒙原生PC应用开发实战:从零搭建到性能优化,掌握ArkTS与DevEco Studio高效开发技巧
华为·性能优化·harmonyos
鋆雨无欢丶20 小时前
docker证书认证问题
运维·docker·容器