ToB企服应用市场:ToB评测及商务社交产业平台

标题: 将手机作为服务器运行docker服务 [打印本页]

作者: 泉缘泉    时间: 2024-7-26 20:40
标题: 将手机作为服务器运行docker服务
媒介

如今手机的配置并不低,即使是2019年生产的一加七Pro,配置也有12+256,CPU是骁龙855,作为服务器运行着配置绰绰有余了,二手的代价如今是400左右也能接受。相对于是自带ups电源的便携低耗docker服务器,还能同时使用安卓系统,配上adb远程做云手机也可以。
要想原生支持docker不仅必要root,安卓内核还需开启docker必要的内核参数。有爱好的可以看之前的文章:在安卓手机上运行原生docker。固然还有一些不root运行的方法,只是效率较低,我就不考虑了。
总结

测试下来和arm Ubuntu里运行docker基本没啥区别(除了不能使用-p映射端口)。另外因为内核版本有点低(4.14),可能运行某些服务会有些标题,比如下面的redis会出警告,必要忽略警告。
下面只测试了四个镜像:halo、redis、jupyter、gitea。其他的镜像应该也是一样,比如用alist挂载网盘配合nplayer播放网盘的视频等。
运行爬虫也是没标题,之前公司的服务器就是arm架构的,跑scrapy爬虫都可以。
运行截图


docker status看不了资源占用

上面开了四个容器,用htop查察资源占用并不高

准备工作

刷机包和boot下载:https://www.123pan.com/s/ihEKVv-3VOx.html 提取码: D5Cm,里面还有一个containerd降级包也下载下来,背面会用到。
termux可以从官网大概f-droid下载,必要注意的是termux和termux-boot必要对应,要么都从github下载,要么都从f-droid下载。
刷机

如果一加七Pro到手是ColorOS12系统,会无法解锁bootloader,必要降级到氢氧系统(9-11)版本才能解锁,必要的可以看: 回退到氢OS的简单方法
lineage

先用mt管理器提取boot.img、dtbo.img和vbmeta.img三个文件。提取步调很简单,随便哪个手机(不必要root)安装mt管理员,打开lineage刷机包里的payload.bin文件,将里面的img复制出来传到电脑上。
然后进入fastboot模式下将这三个img刷入手机
fastboot flash dtbo dtbo.img
fastboot flash vbmeta vbmeta.img
fastboot flash boot boot.img
接着用音量上下键切换到recovery模式,在用adb sideload刷入lineage刷机包。
刷完重启进入系统,然后在进入fastboot模式下刷入修改后的boot.img后重启,安装kernelsu管理器,这时候应该能体现root。
去除网络受限提示
  1. adb shell settings put global captive_portal_https_url https://connect.rom.miui.com/generate_204
  2. adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204
复制代码
如果不去除的话,WIFI不会自动连接。
WIFI adb

https://github.com/RikkaApps/WADB/releases
下载WADB,并设置开机自启,既然要做服务器就都设置开机自启。

termux

我因为卸载了重装出现了个标题:Unable to install bootstrap,是因为之前有root权限导致/data/data/com.termux目录卸载时没有被删除,然后重新安装termux无法访问该目录,所有只必要删除这个目录(rm -rf /data/data/com.termux)再安装。
换源

运行termux-change-repo命令,按如下操纵切换到清华源(阿里源也可以)。


ssh

pkg install openssh
sshd 启动ssh服务
whoami 查察用户名
passwd 设置密码
然后就能在电脑上连接: ssh -p 8022 u0_a140@192.168.31.248
安装docker

先安装下必要的包: pkg install root-repo tsu which vim docker -y

安装docker的时候会有上面的提示,叫你挂载cgroup和检测内核参数是否开启。
  1. tsu
  2. mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup
  3. mkdir -p /sys/fs/cgroup/devices
  4. mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices
  5. exit
复制代码
之前测试使用mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup也可以,不过最好还是按官方发起来。
docker换源

mkdir -p /data/data/com.termux/files/usr/etc/docker
vim /data/data/com.termux/files/usr/etc/docker/daemon.json
将下面的内容加到这个文件里,记得前面要加个英文逗号
  1. "registry-mirrors": [
  2.         "https://hub.uuuadc.top",
  3.         "https://docker.anyhub.us.kg",
  4.         "https://dockerhub.jobcher.com",
  5.         "https://dockerhub.icu",
  6.         "https://docker.ckyl.me",
  7.         "https://docker.awsl9527.cn"
  8.     ]
复制代码
降级containerd

原因见上面编译内核的那篇文章。将网盘里的containerd_1.6.21-1_aarch64.deb用xftp上传到手机上,然后dpkg -i containerd_1.6.21-1_aarch64.deb安装这个包
还必要让这个包不被apt更新,apt-mark hold containerd,可以查察下不会更新的包apt-mark showhold。
运行docker

sudo dockerd --iptables=false 测试不加--iptables也是正常的。
另起一个终端:sudo docker run hello-world
创建自启服务

https://wiki.termux.com/wiki/Termux-services
pkg install termux-services -y
自启服务的管理目录是在$PREFIX/var/service,因为我们安装了sshd和docker,所以如今已经有两个服务。

dockerd的目录结构如下:

可以使用以下命令来管理服务:
雷同sv-enable dockerd就是将docker设为自启动。如果想创建本身的服务,跟dockerd目录结构是一样的,在run里面写必要执行的命令。然后用下面两行命令创建log目录就可以了。
  1. mkdir -p $PREFIX/var/service/<PKG>/log
  2. ln -sf $PREFIX/share/termux-services/svlogger $PREFIX/var/service/<PKG>/log/run
复制代码
实战

halo

https://www.halo.run/
这是个建博客的,我不停在用它,不过我只是用它里面的日志记录一些东西。没找到比这个更好记录这种噜苏的小片断更好的东西,这个还能搜索。

tsu
docker pull halohub/halo:1.5.5
docker run -it --rm --name halo --net=host -v /data/data/com.termux/files/home/halo:/root/.halo halohub/halo:1.5.5
测试使用-p映射端口时,外部无法访问,只能使用--net=host,如果想修改端口的话,就必要改容器里的端口设置了。如果必要容器后台运行,则将-it --rm改成-d。

然后通过手机ip就能进入到博客的安装页面:

redis

docker pull redisfab/rebloom:2.8.1-arm64v8-bionic
如果直接启动会有这个错误,搜索了下是因为内核某些特性不支持,说可以在配置文件里忽略警告试试
  1. Redis will now exit to prevent data corruption. Note that it is possible to suppress this warning by setting the following config: ignore-warnings ARM64-COW-BUG
复制代码
从dockerhub查察当前镜像使用的redis版本

然后去官网下载对应版本的配置文件(这个是下载7.2),去掉最后一行的注释。然后将bind注释掉,protected-mode yes改成protected-mode no。可以添加requirepass,背面跟密码。操纵和redis没啥区别
运行时有个警告,说/proc/sys/net/core/somaxconn数字太小了
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
那改大一点echo 1024 > /proc/sys/net/core/somaxconn
  1. docker run -it --rm --net=host -v /data/data/com.termux/files/home/redis.conf:/etc/redis.conf \
  2. redisfab/rebloom:2.8.1-arm64v8-bionic \
  3. /usr/local/bin/redis-server /etc/redis.conf
复制代码

用redis客户端连接一下可以发现可以连接

gitea

docker pull gitea/gitea:1.22-nightly
id 查察当前用户的id
  1. docker run -d --name gitea \
  2.     --net=host \
  3.     -e USER_UID=10145 \
  4.     -e USER_GID=10145 \
  5.     -v /data/data/com.termux/files/home/gitea-data:/data \
  6.     gitea/gitea:1.22-nightly
复制代码
浏览器访问http://ip:3000进入安装页面
jupyter

docker pull jupyter/minimal-notebook:python-3.8
  1. docker run -it --rm \
  2.         --net=host \
  3.     -v /data/data/com.termux/files/home/jupyter:/home/jovyan/work \
  4.     --name jupyter \
  5.     jupyter/minimal-notebook:python-3.8 \
  6.     start-notebook.sh \
  7.     --NotebookApp.password='argon2:$argon2id$v=19$m=10240,t=10,p=8$a5BXs81gVemKgrXkzY6zVg$2hAJiXc1TFAYl+DKB0RzaHK8lsTczk8/QgCUCch7cys' \
  8.     --NotebookApp.allow_password_change=False \
  9.     --NotebookApp.allow_remote_access=True \
  10.     --NotebookApp.open_browser=False \
  11.     --NotebookApp.notebook_dir="/home/jovyan/work"
复制代码
启动时间很久,大概必要三四分钟,不清楚在准备什么。然后在浏览器访问http://ip:8888,输入密码123456,
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4