此教程将教你如何在Android端搭docker
1. Docker
Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
(来自https://zh.m.wikipedia.org/wiki/Docker)
· 为什么在android不能使用docker
众多厂商阉割掉了cgroup和namespace等docker需要的功能
· 你为什么还说要在android运行docker,标题党!
……
所以我们这次用QEMU虚拟机模拟x86_64的linux系统
· 效率怎样
非常低,在我骁龙625设备上运行docker指令大概需要15秒才有反应(alpine standard版)
· 那些有啥用啊
没什么用,就是折腾,看着别人抱怨android不能运行docker而我能运行的感觉很爽,至少能运行
(废话连篇)
2. 准备工作
①. Termux
请看上一篇文章:准备工作 Termux
②. Alpine Linux系统镜像
Small. Simple. Secure.
Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.
使用Alpine的原因:
- 体积占用小,完全安装后的镜像不到1gb
- 安装快(废话)
- 内存占用小,idle状态仅占用30多MB内存
传送门:
standard-x86_64: alpine-standard-3.10.1-x86_64.iso(v3.10.1, OfficialSite),或者在Termux中:
1 | wget http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-standard-3.10.1-x86_64.iso |
virtual-x86_64: alpine-virt-3.10.1-x86_64.iso(v3.10.1, OfficialSite),或者在Termux中:
1 | wget http://dl-cdn.alpinelinux.org/alpine/v3.10/releases/x86_64/alpine-virt-3.10.1-x86_64.iso |
官网上写到visual版与standard版相似但对虚拟机有特殊优化。
standard版我已测试成功,这次使用visual版。
③. VNC Viewer (可选)
用来连接qemu虚拟机的”显示器”,还可以连接蓝牙/OTG鼠标和键盘,非常强大
为什么是可选,因为qemu有不输出图像模式(-nographic),直接在termux控制台输出,不需要”显示器”,但是有可能翻车。
传送门:
3. 详细过程
Ⅰ. 安装依赖
在Termux中:
1 | pkg install x11-repo unstable-repo |
Ⅱ. 创建虚拟镜像(硬盘)
在Termux中:
1 | qemu-img create -f qcow2 virt-alpine.img 5g |
参数中
5g
代表创建一个最大容量为5g的镜像,可调节,最少2g以保证docker能正常安装。
Ⅲ. 启动虚拟机
在Termux中:
1 | qemu-system-x86_64 -hda virt-alpine.img -cdrom alpine-virt-3.10.1-x86_64.iso -boot d -m 512 -nographic |
参数解释:
-hda
: 启动的虚拟硬盘-cdrom
: 启动的光盘镜像文件(相当于用光盘安装windows)-boot
: 启动槽位,选d(我也不是太清楚)-m
: 内存大小,单位mb-nographic
: 无图像模式,直接在控制台输出--vnc :1
: 以vnc为图像模式输出到”显示器”,并占用vnc 1端口
先使用
-nographic
模式启动,若长时间没出现alpine bootlog这界面,则先按CTRL+X+A
结束进程(或用htop
杀掉qemu进程),再用--vnc :1
vnc图像模式启动
如何连接:
- 打开VNC Viewer
- 点击右下角加号(+)
- Address填
localhost:1
(--vnc
占用的端口),name随意 - 点击CREATE→CONNECT,就可以连接了
(用VNC Viewer操作可能会麻烦,建议用蓝牙/OTG鼠标键盘)
Ⅳ. 安装Alpine到虚拟硬盘
· 使用root账户登录:
· 配置网络:
在alpine中,使用vi编辑器:
1 | vi /etc/network/interfaces |
添加如下配置
1 | auto lo |
保存后重启网络:
1 | /etc/init.d/networking restart |
这样alpine就能访问互联网了
· 设置软件源:
1 | setup-alpine |
选择21(清华大学源),等待更新即可
· 安装:
1 | setup-alpine |
详细配置:
Select keyboard layout: cn
(选择CN键盘布局)Select variant
(cn)Enter system hostname: stageguard
(输入hostname名称,随意)Which one do you want to initialize? (or '?' or 'done') [eth0]
Ip address for eth0? (or 'dhcp', 'none', '?') [10.0.2.15] dhcp
(选dhcp)Changing password for root
(修改root用户密码)Which timezone are you in? ('?' for list) [UTC] Asia/Shanghai
(时区填Asia/Shanghai)HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]
(代理地址,默认none)Enter mirror number (1-47) or URL to add (or r/f/e/done) [f]: 21
(选择软件源,21(清华源))Which SSH server? ('openssh', 'dropbear' or 'none') [openssh]
(SSH服务器,选择openssh(默认))Which disk(s) would you like to use? (or '?' for help or 'none') [none]sda
(安装在何处,选sda)How would you like to use it? ('sys', 'data', 'lvm' or '?' for help) [?] sys
(安装方式,选sys)WARNING: Erase the above disk(s) and continue? [y/N]: y
(清除整个硬盘,y(是))
若出现网络问题:
应该是默认dns服务器异常。
编辑/etc/resolv.conf
将10.0.2.3
改为8.8.8.8
即可bash vi /etc/resolv.conf
Installing system on /dev/sda3:
initramfs: creating /boot/it.....
Installation is complete. Please reboot.
安装完成,现在关闭虚拟机
1 | poweroff |
Ⅴ. 启动Alpine并安装docker
· 启动qemu虚拟机
在Termux中:
1 | qemu-system-x86_64 -hda virt-alpine.img -boot c -m 512 -netdev user,id=nde1,hostfwd=tcp::2222-:22 -device e1000,netdev=nde1,id=d-net1 -nographic |
参数解释:
-hda
: 启动的虚拟硬盘-boot
: 启动槽位,选c(我也不是太清楚)-m
: 内存大小,单位mb-netdev
: 网络配置,详情请看QEMU_Wiki:Documentation/Networking-device
: 设备配置(当前指向网络设备)-nographic
: 无图像模式,直接在控制台输出--vnc :1
: 以vnc为图像模式输出到”显示器”,并占用vnc 1端口
-netdev
参数中的hostfwd
可以映射网络,当前配置会将虚拟机中22(SSH默认)端口映射到物理网络的2222端口上。
· 配置SSHD(可选)
在Alpine中:
1 | vi /etc/ssh/sshd_config |
取消注释PermitRootLogin并修改为yes
重启sshd
现在外部ssh就可以登录alpine的root账户了
在Termux中:
1 | ssh root@localhost -p 2222 |
· 添加community源
在alpine中,docker在其comminuty源里
1 | vi /etc/apk/repositories |
取消注释comminuty源
修改完成后,执行:
1 | apk update |
· 安装docker
1 | apk add docker |
· 修改docker为开机(虚拟机)启动,启动docker
1 | #使docker开机启动 |
· 测试
1 | docker info |
DOCKER 安装完成!
参考资料:
https://github.com/diogok/termux-qemu-alpine-docker/blob/master/README.md
https://stageguard.gitee.io/2019/07/30/run-gogs-on-android/