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