FireAcl

FireAcl

Android运行Docker!(Termux + QEMU + linux_alpine, qemu网络映射)

此教程将教你如何在Android端搭docker

  1. Docker
    Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
    StageGuard
    Android运行Docker!(Termux + QEMU + linux_alpine, qemu网络映射)
    发表于 2019-08-15| 更新于 2019-08-19
    字数总计: 1.6k|阅读时长: 6 分钟|阅读量: 122
    此教程将教你如何在Android端搭docker

  2. 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而我能运行的感觉很爽,至少能运行

(废话连篇)

  1. 准备工作
    ①. Termux
    请看上一篇文章:准备工作 Termux
    ②. Alpine Linux系统镜像
    Small. Simple. Secure.
    Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.
    (来自https://alpinelinux.org/)

使用Alpine的原因:

体积占用小,完全安装后的镜像不到1gb
安装快(废话)
内存占用小,idle状态仅占用30多MB内存
传送门:
standard-x86_64: alpine-standard-3.10.1-x86_64.iso(v3.10.1, OfficialSite),或者在Termux中:

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中:

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控制台输出,不需要”显示器”,但是有可能翻车。

传送门:
VNC Viewer(GooglePlay)

  1. 详细过程
    Ⅰ. 安装依赖
    在Termux中:

pkg install x11-repo unstable-repo
pkg install qemu-utils qemu-system-x86_64
Ⅱ. 创建虚拟镜像(硬盘)
在Termux中:

qemu-img create -f qcow2 virt-alpine.img 5g
创建镜像
创建镜像

参数中5g代表创建一个最大容量为5g的镜像,可调节,最少2g以保证docker能正常安装。

Ⅲ. 启动虚拟机
在Termux中:

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图像模式启动
alpine bootlog
alpine bootlog

如何连接:

打开VNC Viewer
点击右下角加号(+)
Address填localhost:1(–vnc占用的端口),name随意
点击CREATE→CONNECT,就可以连接了

(用VNC Viewer操作可能会麻烦,建议用蓝牙/OTG鼠标键盘)
用VNC连接qemu”显示器”
用VNC连接qemu”显示器”
Ⅳ. 安装Alpine到虚拟硬盘
· 使用root账户登录:
登录到alpine
登录到alpine

· 配置网络:
在alpine中,使用vi编辑器:

vi /etc/network/interfaces
添加如下配置

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
保存后重启网络:

/etc/init.d/networking restart
网络重启成功
网络重启成功

这样alpine就能访问互联网了

· 设置软件源:
setup-alpine
选择21(清华大学源),等待更新即可

· 安装:
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即可
vi /etc/resolv.conf
Installing system on /dev/sda3:
initramfs: creating /boot/it…..
Installation is complete. Please reboot.

安装完成,现在关闭虚拟机

poweroff
Ⅴ. 启动Alpine并安装docker
· 启动qemu虚拟机
在Termux中:

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中:

vi /etc/ssh/sshd_config
取消注释PermitRootLogin并修改为yes
修改sshd_config
修改sshd_config

重启sshd

现在外部ssh就可以登录alpine的root账户了
在Termux中:

ssh root@localhost -p 2222
· 添加community源
在alpine中,docker在其comminuty源里

vi /etc/apk/repositories
取消注释comminuty源
alpine源
alpine源

修改完成后,执行:

apk update
· 安装docker
apk add docker
安装完成
安装完成

· 修改docker为开机(虚拟机)启动,启动docker

#使docker开机启动
rc-update add docker

#开启docker服务
service docker start

#后台启动
setsid containerd
setsid dockerd
StageGuard
Android运行Docker!(Termux + QEMU + linux_alpine, qemu网络映射)
发表于 2019-08-15| 更新于 2019-08-19
字数总计: 1.6k|阅读时长: 6 分钟|阅读量: 122
此教程将教你如何在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而我能运行的感觉很爽,至少能运行

(废话连篇)

  1. 准备工作
    ①. Termux
    请看上一篇文章:准备工作 Termux
    ②. Alpine Linux系统镜像
    Small. Simple. Secure.
    Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.
    (来自https://alpinelinux.org/)

使用Alpine的原因:

体积占用小,完全安装后的镜像不到1gb
安装快(废话)
内存占用小,idle状态仅占用30多MB内存
传送门:
standard-x86_64: alpine-standard-3.10.1-x86_64.iso(v3.10.1, OfficialSite),或者在Termux中:

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中:

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控制台输出,不需要”显示器”,但是有可能翻车。

传送门:
VNC Viewer(GooglePlay)

  1. 详细过程
    Ⅰ. 安装依赖
    在Termux中:

pkg install x11-repo unstable-repo
pkg install qemu-utils qemu-system-x86_64
Ⅱ. 创建虚拟镜像(硬盘)
在Termux中:

qemu-img create -f qcow2 virt-alpine.img 5g
创建镜像
创建镜像

参数中5g代表创建一个最大容量为5g的镜像,可调节,最少2g以保证docker能正常安装。

Ⅲ. 启动虚拟机
在Termux中:

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图像模式启动
alpine bootlog
alpine bootlog

如何连接:

打开VNC Viewer
点击右下角加号(+)
Address填localhost:1(–vnc占用的端口),name随意
点击CREATE→CONNECT,就可以连接了

(用VNC Viewer操作可能会麻烦,建议用蓝牙/OTG鼠标键盘)
用VNC连接qemu”显示器”
用VNC连接qemu”显示器”
Ⅳ. 安装Alpine到虚拟硬盘
· 使用root账户登录:
登录到alpine
登录到alpine

· 配置网络:
在alpine中,使用vi编辑器:

vi /etc/network/interfaces
添加如下配置

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
保存后重启网络:

/etc/init.d/networking restart
网络重启成功
网络重启成功

这样alpine就能访问互联网了

· 设置软件源:
setup-alpine
选择21(清华大学源),等待更新即可

· 安装:
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即可
vi /etc/resolv.conf
Installing system on /dev/sda3:
initramfs: creating /boot/it…..
Installation is complete. Please reboot.

安装完成,现在关闭虚拟机

poweroff
Ⅴ. 启动Alpine并安装docker
· 启动qemu虚拟机
在Termux中:

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中:

vi /etc/ssh/sshd_config
取消注释PermitRootLogin并修改为yes
修改sshd_config
修改sshd_config

重启sshd

现在外部ssh就可以登录alpine的root账户了
在Termux中:

ssh root@localhost -p 2222
· 添加community源
在alpine中,docker在其comminuty源里

vi /etc/apk/repositories
取消注释comminuty源
alpine源
alpine源

修改完成后,执行:

apk update
· 安装docker
apk add docker
安装完成
安装完成

· 修改docker为开机(虚拟机)启动,启动docker

#使docker开机启动
rc-update add docker

#开启docker服务
service docker start

#后台启动
setsid containerd
setsid dockerd
docker启动完成
docker启动完成

· 测试
docker info
docker info
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/
转载自stageguard