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

前言

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

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

相关推荐
GentleDevin3 分钟前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记11 分钟前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
心机之蛙qee1 小时前
docker的安装(RHEL9)
运维·docker·容器
炸炸鱼.1 小时前
Docker 高级管理 —— 容器通信技术与数据持久化
docker
乐hh2 小时前
DM8配置SSL
数据库·docker·ssl
极客先躯2 小时前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点
凤舞飘伶2 小时前
windows安装docker-desk
windows·docker·容器
运维全栈笔记2 小时前
Docker一键部署Immich:自建私有云相册,照片视频备份无忧
linux·服务器·网络·docker·容器
南村群童欺我老无力.3 小时前
鸿蒙PC多端适配的断点设计与布局策略
华为·harmonyos