继在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
#重启策略
当然,以上环境变量中EMULATOR_DEVICE以及安卓版本都可以更改,支持的型号以及版本看下图,但本人实测Samsung Galaxy S10+安卓11是能正常启动的......,如果上安卓12就不行,,,,当然也可以自行组合测试。
顺便说一下,上面的命令里面有童鞋会感到奇怪,为什么EMULATOR_ADDITIONAL_ARGS值后面要用反斜杠分开,而不是直接加引号,,,,这个我试过用引号,然后莫名其妙就导致了配置不生效,所以为了以防万一,全部都改成了反斜杠的形式。
三、使用模拟器
等部署好后就可以在浏览器打开ip:6080访问web vnc,打开后需要手动点击连接。
然后就是等待开机,这个过程有点长,耐心等就行,有报错没有问题,都是正常情况。
一般等个3分钟吧,就可以看到安卓界面了。那剩下的就看自己折腾了。
顺便用aida64检测下机器配置
至于想要公网访问,把端口放行就可以了,这就很简单了,不会就百度吧。
四、已知问题
1.目前版本有概率会重启docker失败(安卓系统可以正常重启),只能通过重建docker来解决,不清楚具体原因,需要等待作者修复,但重建不会导致数据丢失,一开始已经数据持久化了。
2.如果是嵌套虚拟化的情况下,性能会受限,这个其实不算问题,因为嵌套虚拟化一定会导致性能损失,建议物理机或者nas直接部署。
评论前必须登录!
注册