旧手机拯救计划 - 在Android手机上部署Docker与LXC

2023 年 8 月 10 日 星期四(已编辑)
/ ,
这篇文章上次修改于 2025 年 2 月 3 日 星期一,可能部分内容已经不适用,如有疑问可询问作者。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

旧手机拯救计划 - 在Android手机上部署Docker与LXC

一切的前提是安装了支持 Docker/LXC 的内核 本文使用的设备为小米 8SE,如果你跟我是同一个型号,可以使用我发布的内核 (适用于 MIUI12/12.5,安卓 10)

我采用的方案是在 chroot 容器中启动 Docker 与 LXC,可以省去很多不必要的麻烦,配置起来更简单,且几乎没有性能损失

安装 Linux Deploy

Github下载

需要 root 权限

配置 Ubuntu 容器

选项内容
发行版Ubuntu
发行版 GNU/Linux 版本jammy(22.04) (推荐)
源地址https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/
安装类型镜像文件
镜像大小 (MB)8192+ (推荐)
用户名root
本地化zh_CN.UTF-8
DNS223.5.5.5 (推荐)
初始化启用
初始化系统sysv
挂载启用
挂载点列表见下文
SSH启用
SSH 设置→端口1024+ (推荐)

挂载点列表

先挂载 cgroup

su -c "mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && mkdir -p /sys/fs/cgroup/devices && mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd"

在手机终端执行,看输出中的挂载点

su -c "mount | grep cgroup"

把输出中的挂载点全部挂载上,注意顺序:先挂载/sys/fs/cgroup目录下的,再挂载/dev目录下的,比如我这里就是

启动

返回主界面,点击右上角安装,看到 <<< deploy 后点击启动

使用任意 ssh 工具连接到容器 ssh root@IP -p端口

例如 ssh root@127.0.0.1 -p8023

安装 docker

添加仓库和公钥

apt update
apt install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 docker-ce

apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动 docker

挂载 cgroup,每次重启手机,都需要在手机终端运行 (注意是手机终端,不是 chroot 容器终端),每次开机执行一次即可。如果是我发布的内核,安装过kernel-fix模块后不需要这一步

su -c "mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && mkdir -p /sys/fs/cgroup/devices && mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd"

启动 dockerd,每次重启 chroot 容器都需要再次运行

DOCKER_RAMDISK=true dockerd --iptables=false

另开一个终端,ssh 连接到容器

docker run --rm hello-world

看到 Hello from Docker! 和一大串话就是安装好了

注意 Docker 容器要上网就必须使用 host 模式,在启动命令里添加 --net=host

配置 dockerd 自启动

echo 'DOCKER_OPTS="--iptables=false"' >> /etc/default/docker
echo 'export DOCKER_RAMDISK=true' >> /etc/default/docker

重启 chroot 容器后可以直接使用 docker,不需要再启动 dockerd

安装 LXC

安装

apt update
apt install lxc wget

配置 LXC

echo "lxc.init.cmd = /sbin/init systemd.unified_cgroup_hierarchy" >> /usr/share/lxc/config/common.conf
echo "lxc.net.0.type = none" > /etc/lxc/default.conf

挂载 cgroup,每次重启手机,都需要在手机终端运行 (注意是手机终端,不是 chroot 容器终端),每次开机执行一次即可。如果是我发布的内核,安装过kernel-fix模块后不需要这一步

su -c "mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && mkdir -p /sys/fs/cgroup/devices && mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd"

创建 LXC 容器

lxc-create -t download -n 容器名 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images

Ubuntu 22.04 为例,依次输入 ubuntu jammy arm64

改密码

chroot /var/lib/lxc/容器名/rootfs /bin/passwd

输入密码 回车

再次输入密码 回车

启动 LXC 容器

lxc-start -n 容器名

进入 LXC 容器

lxc-console -n 容器名

输入用户名 root 回车

输入密码 回车

按 Ctrl + a + q 退出容器

改 DNS 必改!!

echo 'nameserver 223.5.5.5' > /etc/resolv.conf

换源

sed -i 's|http://ports.ubuntu.com/ubuntu-ports|https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports|g' /etc/apt/sources.list

改密码

passwd

输入密码 回车

再次输入密码 回车

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...