转载请注明出处:小锋学长生活大爆炸xfxuezhang.cn
如果本文帮助到了你,欢迎点赞、收藏、关注哦~
软件介绍
以前要在Termux上安装Docker,不仅步骤麻烦,性能还特别差。今天学长发现了一款开源工具,能一键在安卓机上部署Docker,它就是Podroid!
他有以下特点:
- • Podman、Docker 和 LXC------已预装,启动即可使用
- • 真正的虚拟机------通过 QEMU 在自定义内核上运行 Alpine Linux,并且能够在支持 pKVM 的设备上使用硬件加速的 AVF
- • 应用内终端 - 完整 xterm-256color,122 种配色主题,13 种字体,实时调整大小
- • X11 桌面 - 在内置查看器中运行 GUI Linux 应用,支持触摸、键盘、鼠标和音频
- • USB 直通、SSH、端口转发以及客户机到 Android 的桥接
- • 容器备份、实时虚拟机/设备状态视图以及与来宾共享下载文件夹
- • 无需 root,适用于 Android 8+的任何 arm64 设备
安装步骤
接下来跟学长一起安装试一下:
1、下载安装包。
- • https://github.com/ExTV/Podroid/releases
- • 仅支持 ARM64(arm64-v8a)。需要 Android 8(API 26)或更高版本。该 APK 无法安装在 32 位或 x86 设备上。
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

更多指南可以看官方文档:
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)具备这些权限,这就是为什么它在支持该功能的设备上速度要快得多。
