[心得] 手機跑docker

作者: ivon852 (ASUS)   2021-12-19 14:18:40
We need to go deeper...
基本上,Android手機沒辦法直接跑docker,因為kernel根本就不支援。雖然如此,我們還
有QEMU虛擬機呀,可惜KVM也沒辦法用。
網誌好讀版: https://bit.ly/3FeHQTN
架構:Termux模擬器建立QEMU虛擬機,虛擬機裡面安裝Docker,然後再通訊埠轉發。
以簡單的Apache伺服器為例,看能否在手機的瀏覽器,看到虛擬機的docker所建立的網頁。
- 手機: Sony Xperia 5 II,Android 11,8GB RAM。
網頁內容:
https://i.imgur.com/JaeWjno.png
## 建立虛擬機&安裝Docker
1. 開啟Termux (建議安裝[F-droid](https://f-droid.org/en/packages/com.termux/)版
本的),輸入指令:
```bash
pkg install qemu-utils qemu-common qemu-system-x86_64-headless
```
2. 下載內含virt的Alpine Linux作業系統iso
```bash
mkdir alpine && cd $_
wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-virt-3.12
.3-x86_64.iso
```
3. 建立4G的虛擬硬碟
```bash
qemu-img create -f qcow2 alpine.img 4G
```
4. 開機
```bash
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 \
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code
.fd \
-netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \
-cdrom alpine-virt-3.12.3-x86_64.iso \
-nographic alpine.img
```
5. 使用`root`帳號登入,啟用網路卡。
```bash
setup-interfaces
#Available interfaces are: eth0.
#Enter '?' for help on bridges, bonding and vlans.
#Which one do you want to initialize? (or '?' or 'done') [eth0]
#Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
#Do you want to do any manual network configuration? [no]
ifup eth0
```
6. 使用oofnikj準備好的answerfile安裝系統
```bash
wget https://gist.githubusercontent.com/oofnikj/e79aef095cd08756f7f26ed244355d62
/raw/answerfile
```
7. 讓開機時能輸出訊息
```bash
sed -i -E 's/(local kernel_opts)=.*/\1="console=ttyS0"/' /sbin/setup-disk
```
8. 安裝系統至硬碟,期間會要求建立root帳號的密碼。
```bash
setup-alpine -f answerfile
```
9. 先用`poweroff`指令關機,以後就用這條指令啟動虛擬機(可自行寫成shell):
```bash
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 \
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code
.fd \
-netdev user,id=n1,hostfwd=tcp::2222-:22,hostfwd=tcp::8081-:80 -device virtio-
net,netdev=n1 \
-nographic alpine.img
#m是分配1GB記憶體,cpu是2核CPU,hostfwd則是把外部8081通訊埠轉發到虛擬機的80通訊
埠。
```
10. 安裝docker,並設定開機自動啟動服務。
```bash
apk update && apk add docker
service docker start
rc-update add docker
```
## 安裝Apache伺服器
1. Pull Apache伺服器
```bash
docker pull httpd
```
2. 執行Apache,將虛擬機的80通訊埠轉發到Docker容器的80通訊埠,並將docker容器的檔
案路徑對應到系統的`/root/website`目錄。
```bash
docker run -d -p 80:80
作者: isaacisaac (胖i)   2021-12-19 14:28:00
推實驗精神
作者: powerfulgsr   2021-12-19 14:34:00
強!
作者: csh810317 (翰翰)   2021-12-19 14:40:00
以後手機也可以當伺服器了(?
作者: wetor (白白)   2021-12-19 14:47:00
作者: emptie ([ ])   2021-12-19 14:51:00
一直都可以啊
作者: janglang   2021-12-19 15:18:00
要注意log4j阿
作者: sean0430 (NANA)   2021-12-19 15:55:00
好猛!!
作者: donnyyy (donnyyy)   2021-12-19 15:57:00
先用Termux模擬器再用QEMU下再建立容器..效能折損很大吧
作者: A4P8T6X9 (殘廢的名偵探)   2021-12-19 17:03:00
上次測試,慢到要有點耐心
作者: nw0309 (snowpork)   2021-12-19 17:55:00
收藏
作者: harry886901 (風嵐)   2021-12-19 18:46:00
好玩但一點都不實用的功能 XD
作者: leo08210917 (leo)   2021-12-19 18:50:00
有機會看到手機app全都在容器內跑嗎 XD
作者: donnyyy (donnyyy)   2021-12-19 18:53:00
那必須再裝一個Docker-Android來跑。但支援手機款式很少應該會慢到難以想像
作者: bobboy8755 (小狼狗)   2021-12-19 19:10:00
我只知道docking
作者: ShibaTatsuya (司波達也)   2021-12-19 19:21:00
推 長知識了
作者: avans (阿緯)   2021-12-19 19:50:00
作者: osk2 (.)(.)   2021-12-19 19:50:00
真屌
作者: ZnOnZ (最亮的星)   2021-12-19 20:06:00
好屌
作者: diaper151 (川川)   2021-12-19 20:37:00
原生的:https://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27
作者: avmm9898 (對酒當歌)   2021-12-19 20:51:00
太hardcore了!
作者: danielwangdd (迪克)   2021-12-19 22:12:00
好厲害樓主是自學程式嗎?
作者: zack0000 (哄哄哄轟轟)   2021-12-19 22:51:00
作者: Ptt911 (理智線)   2021-12-19 23:27:00
作者: enderboy7652 (EnderBoy)   2021-12-19 23:43:00
作者: Cireiat (Cire)   2021-12-20 13:03:00
會改內核就可以了,不過找不到相關的中文教學,有誰可以教一下怎麼改內核嗎
作者: LoveShibeInu (柴犬很笨)   2021-12-20 13:06:00
手機可以跑docker! 下次把yolo的docker包進來看看
作者: f416720001 (Gemini翔)   2021-12-20 19:07:00
樓上等等,不是有tf.js,難道你要用Mali來做訓練之後該不會還可以多台手機K8s
作者: ThisIsNotKFC (Time to Change)   2021-12-21 09:21:00

Links booklink

Contact Us: admin [ a t ] ucptt.com