继在docker里面玩linux、windows、群晖后,最近又发现了一个interesting的docker——docker-android,docker部署安卓模拟题,还附带了web vnc,可以通过网页访问模拟器,最重要的是能远程访问就可以解决很多事情。

之前写过docker下部署群晖系统《docker部署群晖DSM系统——快速体验群晖系统》和windows《离谱:docker下一分钟部署windows系统》,和这次docker部署安卓和前两篇原理相同,本质上是在docker下调用kvm来实现虚拟化功能,也就是用docker+kvm建立一个虚拟机。

至于docker无法拉取镜像?往期文章有写过方法,自行翻看,这里不再赘述。

一、检测环境

在部署前需要先检测kvm,物理机要开启虚拟化功能,如果是在虚拟机里面部署记得开启嵌套虚拟化(最简单的cpu选择host模式),如果是nas一般都支持kvm(至少威联通支持,群晖没机器不知道),至于云服务器部分不支持嵌套虚拟化,需要自己实测。

在ssh下输入以下命令:

sudo apt install cpu-checker sudo kvm-ok

如果返回如下结果为则说明支持kvm,若返回错误,物理机请到bios中开启虚拟化,虚拟机请开启嵌套虚拟化,若系统太老建议更新系统,部分老系统不带kvm驱动。

INFO: /dev/kvm exists KVM acceleration can be used

二、部署docker-android

安装好docker后输入以下命令就可以完成部署,记得删去注释再复制到ssh里面:

docker run -d -p 6080:6080 #映射6080端口,web vnc需要这个端口 -e EMULATOR_DEVICE=Samsung Galaxy S10 #模拟的手机型号 -e WEB_VNC=true #启用web vnc ​ -e EMULATOR_ADDITIONAL_ARGS=-cores 6 -memory 5120 #配置性能,cores后面跟cpu核心,memory后面是内存大小 #这里的意思是6核5120m内存 #注意,这里配置一定要给够,不然会很卡 -e EMULATOR_DATA_PARTITION=9000m #分配9000m的存储空间 -v data:/home/androidusr #数据持久化,data更换为本地目录 --device /dev/kvm #添加调用kvm --name docker-android #docker名称,这里随意 --restart always #重启策略 budtmo/docker-android:emulator_11.0 #拉取的镜像以及安卓版本,也可以加上自己的docker拉取地址

如果是威联通nas,点击添加应用程序,输入以下docker-compose.yml就行,对于其他品牌的nas也是一样,具体的代码对应下面的注释,再照着修改即可。

version: '3.8' services: android-emulator: image: budtmo/docker-android:emulator_11.0 #拉取的镜像以及安卓版本,也可以加上自己的docker拉取地址 ​ container_name: docker-android #docker名称,这里随意 ​ ports: - "6080:6080" #映射6080端口,web vnc需要这个端口 ​ environment: - EMULATOR_DEVICE=Samsung Galaxy S10 #模拟的手机型号 ​ - WEB_VNC=true #启用web vnc ​ - EMULATOR_ADDITIONAL_ARGS=-cores 6 -memory 5120 #配置性能,cores后面跟cpu核心,memory后面是内存大小 #这里的意思是6核5120m内存 #注意,这里配置一定要给够,不然会很卡 ​ - EMULATOR_DATA_PARTITION=9000m #分配9000m的存储空间 ​ volumes: - /data:/home/androidusr #数据持久化,data更换为本地目录 ​ devices: - /dev/kvm #添加调用kvm ​ restart: always #重启策略docker下部署安卓模拟器,附带网页访问,远程使用更方便

当然,以上环境变量中EMULATOR_DEVICE以及安卓版本都可以更改,支持的型号以及版本看下图,但本人实测Samsung Galaxy S10+安卓11是能正常启动的......,如果上安卓12就不行,,,,当然也可以自行组合测试。

docker下部署安卓模拟器,附带网页访问,远程使用更方便
docker下部署安卓模拟器,附带网页访问,远程使用更方便

顺便说一下,上面的命令里面有童鞋会感到奇怪,为什么EMULATOR_ADDITIONAL_ARGS值后面要用反斜杠分开,而不是直接加引号,,,,这个我试过用引号,然后莫名其妙就导致了配置不生效,所以为了以防万一,全部都改成了反斜杠的形式。

三、使用模拟器

等部署好后就可以在浏览器打开ip:6080访问web vnc,打开后需要手动点击连接。

docker下部署安卓模拟器,附带网页访问,远程使用更方便

然后就是等待开机,这个过程有点长,耐心等就行,有报错没有问题,都是正常情况。

docker下部署安卓模拟器,附带网页访问,远程使用更方便
docker下部署安卓模拟器,附带网页访问,远程使用更方便

一般等个3分钟吧,就可以看到安卓界面了。那剩下的就看自己折腾了。

docker下部署安卓模拟器,附带网页访问,远程使用更方便
docker下部署安卓模拟器,附带网页访问,远程使用更方便

顺便用aida64检测下机器配置

docker下部署安卓模拟器,附带网页访问,远程使用更方便
docker下部署安卓模拟器,附带网页访问,远程使用更方便
docker下部署安卓模拟器,附带网页访问,远程使用更方便

至于想要公网访问,把端口放行就可以了,这就很简单了,不会就百度吧。

四、已知问题

1.目前版本有概率会重启docker失败(安卓系统可以正常重启),只能通过重建docker来解决,不清楚具体原因,需要等待作者修复,但重建不会导致数据丢失,一开始已经数据持久化了。

2.如果是嵌套虚拟化的情况下,性能会受限,这个其实不算问题,因为嵌套虚拟化一定会导致性能损失,建议物理机或者nas直接部署。

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。