【工具】在 Android 手机上运行 Docker

转载请注明出处:小锋学长生活大爆炸xfxuezhang.cn

如果本文帮助到了你,欢迎点赞、收藏、关注哦~


软件介绍

以前要在Termux上安装Docker,不仅步骤麻烦,性能还特别差。今天学长发现了一款开源工具,能一键在安卓机上部署Docker,它就是Podroid!

https://github.com/ExTV/Podroid

他有以下特点:

  • • Podman、Docker 和 LXC------已预装,启动即可使用
  • • 真正的虚拟机------通过 QEMU 在自定义内核上运行 Alpine Linux,并且能够在支持 pKVM 的设备上使用硬件加速的 AVF
  • • 应用内终端 - 完整 xterm-256color,122 种配色主题,13 种字体,实时调整大小
  • • X11 桌面 - 在内置查看器中运行 GUI Linux 应用,支持触摸、键盘、鼠标和音频
  • • USB 直通、SSH、端口转发以及客户机到 Android 的桥接
  • • 容器备份、实时虚拟机/设备状态视图以及与来宾共享下载文件夹
  • • 无需 root,适用于 Android 8+的任何 arm64 设备

安装步骤

接下来跟学长一起安装试一下:

1、下载安装包。

2、打开App,配置项均保持默认即可,依次是:

3、接下来只需要点击"启动虚拟机"。

4、如果你的设备支持加速,那么还会提示你:

只需要按照提示执行:

复制代码
  adb shell pm grant com.excp.podroid android.permission.MANAGE_VIRTUAL_MACHINE
adb shell pm grant com.excp.podroid android.permission.USE_CUSTOM_VIRTUAL_MACHINE

5、后续部署镜像,在手机上不好操作,可以用电脑来执行,账号和密码默认是:

复制代码
  ip: 手机ip
端口:9922
账号:root
密码:podroid

对应的命令是:

复制代码
  ssh root@<手机ip> -p 9922

更多指南可以看官方文档:

https://extv.github.io/Podroid/guide/

6、我们尝试简单部署一个nginx试试:

复制代码
  docker run -d -p 8080:80 docker.1ms.run/nginx

如果官方Docker源太卡,推荐一个巨好用的换源工具:

https://github.com/RubyMetric/chsrc

工作原理

Podroid 是一个真正的虚拟机,而不是转译层或容器技巧。一个运行自定义 Linux 7.1.5 内核的 Alpine Linux 3.24 客户机在 Android 应用内启动,具备完整的进程隔离和持久化文件系统。

当你点击"启动虚拟机"时,该应用会启动一个真正的虚拟机监控程序,并运行一个真实的 aarch64 Alpine Linux 客户机。客户机内核、init 系统、shell 以及你运行的每一个进程,都在一个完全虚拟化的机器中执行真实的 ARM64 机器码。没有对 Alpine 二进制文件进行指令翻译,没有 Android 内核命名空间的花招,也没有 chroot。客户机看到的是一个完全干净的 Linux 环境。

Podroid 支持两种虚拟机监控程序后端,可在设置中选择。无论采用哪种方式,客户机都完全相同------只有宿主机侧的虚拟化层不同。

  • • QEMU(默认):通过 TCG 进行软件 CPU 模拟。可在任何 ARM64 Android 8+ 设备上运行。由于每条客户机指令都由主机 CPU 翻译并执行,因此比原生方式慢。有关调优选项,请参阅"后端"页面。
  • • AVF / pKVM:通过 Android 虚拟化框架实现的硬件虚拟化。在搭载 pKVM 的较新 Pixel 设备上可用。以接近原生的速度运行。需要两项一次性的 adb 权限授予。参见后端:QEMU 与 AVF。

在默认的 QEMU 路径下,每条客户机 CPU 指令都是通过软件模拟执行的。没有捷径可走:在 Android 上,没有 root 权限就无法实现 KVM 硬件虚拟化。Podroid 上 QEMU 的 CPU 后端是 TCG(Tiny Code Generator),一个软件 JIT,在运行时将客户机 ARM64 指令翻译为主机 ARM64 指令。每个客户机基本块的流水线是:取客户机指令、解码、翻译为主机 IR、优化、生成主机代码、将结果缓存为"翻译块"(TB)、执行。简单标量代码的运行开销大约是原生代码的 2-5 倍;任何会产生大量短生命周期块的东西(分支密集的代码、动态分派、解释器)都会严重放大这一开销。通过 KVM 实现的硬件虚拟化将完全消除转译,让客户机直接在物理 CPU 核心上运行。KVM 需要 CAP_SYS_ADMIN 或 Android 虚拟化框架的特殊权限。QEMU 两者都没有。AVF(pKVM)具备这些权限,这就是为什么它在支持该功能的设备上速度要快得多。

相关推荐
Carson带你学Android1 小时前
OpenAI Dots 登陆手机端:手机上派任务,AI 在云端写代码
android·ios
事圆则缓1 小时前
Android 依赖注入库到底应该怎么选
android
吴声子夜歌1 小时前
Docker入门与实战——实战案例(分布式处理与大数据平台)
大数据·分布式·docker
JavaPub-rodert1 小时前
服务器不能访问 Docker Hub,镜像怎么搬过去?讲透 docker save、load、export、import 与离线镜像分发
运维·服务器·docker
一只大侠的侠10 小时前
Codex跑自动流,我用ToDesk观看模式手机盯了一下午
智能手机
m0_6464299710 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
大圣编蚕11 小时前
初探 NDK 的世界:从零开始理解 Android 原生开发
android
云贝贝贝11 小时前
MySQL 慢查询定位与索引优化实战
android
果粒蹬i11 小时前
ToDesk移动端终端:手机直接操作Claude Code命令行
智能手机