.
...
图片

上传格式要求:jpg、gif、png(10MB),最多上传50个文件

圈 主
管理员 0 浙江
发布:2024-09-14 (13:07:57)
继在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-checkersudo kvm-ok
如果返回如下结果为则说明支持kvm,若返回错误,物理机请到bios中开启虚拟化,虚拟机请开启嵌套虚拟化,若系统太老建议更新系统,部分老系统不带kvm驱动。


INFO: /dev/kvm existsKVM 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直接部署。

来源:憨憨的小木屋

相关帖子
关闭

账号登录