繼在docker里面玩linux、windows、群暉后,最近又發(fā)現了一個interesting的docker——docker-android,docker部署安卓模擬題,還附帶了web vnc,可以通過網頁訪問模擬器,最重要的是能遠程訪問就可以解決很多事情。
之前寫過docker下部署群暉系統(tǒng)《docker部署群暉DSM系統(tǒng)——快速體驗群暉系統(tǒng)》和windows《離譜:docker下一分鐘部署windows系統(tǒng)》,和這次docker部署安卓和前兩篇原理相同,本質上是在docker下調用kvm來實現虛擬化功能,也就是用docker+kvm建立一個虛擬機。
至于docker無法拉取鏡像?往期文章有寫過方法,自行翻看,這里不再贅述。
一、檢測環(huán)境
在部署前需要先檢測kvm,物理機要開啟虛擬化功能,如果是在虛擬機里面部署記得開啟嵌套虛擬化(最簡單的cpu選擇host模式),如果是nas一般都支持kvm(至少威聯(lián)通支持,群暉沒機器不知道),至于云服務器部分不支持嵌套虛擬化,需要自己實測。
在ssh下輸入以下命令:
sudo apt install cpu-checker sudo kvm-ok
如果返回如下結果為則說明支持kvm,若返回錯誤,物理機請到bios中開啟虛擬化,虛擬機請開啟嵌套虛擬化,若系統(tǒng)太老建議更新系統(tǒng),部分老系統(tǒng)不帶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拉取地址
如果是威聯(lián)通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 #重啟策略
當然,以上環(huán)境變量中EMULATOR_DEVICE以及安卓版本都可以更改,支持的型號以及版本看下圖,但本人實測Samsung Galaxy S10+安卓11是能正常啟動的......,如果上安卓12就不行,,,,當然也可以自行組合測試。
順便說一下,上面的命令里面有童鞋會感到奇怪,為什么EMULATOR_ADDITIONAL_ARGS值后面要用反斜杠分開,而不是直接加引號,,,,這個我試過用引號,然后莫名其妙就導致了配置不生效,所以為了以防萬一,全部都改成了反斜杠的形式。
三、使用模擬器
等部署好后就可以在瀏覽器打開ip:6080訪問web vnc,打開后需要手動點擊連接。
然后就是等待開機,這個過程有點長,耐心等就行,有報錯沒有問題,都是正常情況。
一般等個3分鐘吧,就可以看到安卓界面了。那剩下的就看自己折騰了。
順便用aida64檢測下機器配置
至于想要公網訪問,把端口放行就可以了,這就很簡單了,不會就百度吧。
四、已知問題
1.目前版本有概率會重啟docker失?。ò沧肯到y(tǒng)可以正常重啟),只能通過重建docker來解決,不清楚具體原因,需要等待作者修復,但重建不會導致數據丟失,一開始已經數據持久化了。
2.如果是嵌套虛擬化的情況下,性能會受限,這個其實不算問題,因為嵌套虛擬化一定會導致性能損失,建議物理機或者nas直接部署。
,