将手机作为服务器运行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查看资源占用并不高

准备工作
  • 一加七Pro手机(其他手机需自己编译内核)
  • lineage19.1刷机包
  • 已开启内核参数的boot.img
  • termux

刷机包和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.imgdtbo.imgvbmeta.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。

去除网络受限提示
adb shell settings put global captive_portal_https_url https://connect.rom.miui.com/generate_204
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和检测内核参数是否开启。

tsu
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
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

将下面的内容加到这个文件里,记得前面要加个英文逗号

"registry-mirrors": ["https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn"]
降级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的目录结构如下:

  • down: 如果该文件存在,则服务目前是禁用状态
  • finish: 停止时运行的脚本
  • log: 这个不用管,按教程生成就行了
  • run: 启动时运行的脚本
  • supervise: 估计的服务运行的一些文件

可以使用以下命令来管理服务:

  • sv-enable sshd: sshd服务设为自启动
  • sv-disable sshd: 取消sshd自启动
  • sv down sshd: 停止sshd服务,并使本次Termux运行期间sshd自启动服务失效
  • sv up sshd: 启动sshd服务
  • sv status sshd: 查看sshd服务运行状态

类似sv-enable dockerd就是将docker设为自启动。如果想创建自己的服务,跟dockerd目录结构是一样的,在run里面写需要执行的命令。然后用下面两行命令创建log目录就可以了。

mkdir -p $PREFIX/var/service/<PKG>/log
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

如果直接启动会有这个错误,搜索了下是因为内核某些特性不支持,说可以在配置文件里忽略警告试试

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

docker run -it --rm --net=host -v /data/data/com.termux/files/home/redis.conf:/etc/redis.conf \
redisfab/rebloom:2.8.1-arm64v8-bionic \
/usr/local/bin/redis-server /etc/redis.conf

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

gitea

docker pull gitea/gitea:1.22-nightly

id 查看当前用户的id

docker run -d --name gitea \--net=host \-e USER_UID=10145 \-e USER_GID=10145 \-v /data/data/com.termux/files/home/gitea-data:/data \gitea/gitea:1.22-nightly

浏览器访问http://ip:3000进入安装页面

jupyter

docker pull jupyter/minimal-notebook:python-3.8

docker run -it --rm \--net=host \-v /data/data/com.termux/files/home/jupyter:/home/jovyan/work \--name jupyter \jupyter/minimal-notebook:python-3.8 \start-notebook.sh \--NotebookApp.password='argon2:$argon2id$v=19$m=10240,t=10,p=8$a5BXs81gVemKgrXkzY6zVg$2hAJiXc1TFAYl+DKB0RzaHK8lsTczk8/QgCUCch7cys' \--NotebookApp.allow_password_change=False \--NotebookApp.allow_remote_access=True \--NotebookApp.open_browser=False \--NotebookApp.notebook_dir="/home/jovyan/work"

启动时间很久,大概需要三四分钟,不清楚在准备什么。然后在浏览器访问http://ip:8888,输入密码123456,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十一章 Linux内核定时器

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十二章 LED驱动实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【python014】Python爬取并解析潮汐天气简报-潮历数据

1.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 【python014】Python爬取并解析潮汐天气简报-潮历数据&#xff0c;源代码下载【python014】Python爬取并解析潮汐天气简报-潮历数据&#xff0c;源代码下载【python014】Python爬取并解…

EtherNet/IP转Profinet协议转化网关(功能与配置)

如何将EtherNet/IP和Profinet网络连接通讯起来呢?近来几天有几个朋友问到这个问题&#xff0c;那么作者在这里统一说明一下。其实有一个不错的设备产品可以很轻易地解决这个问题&#xff0c;名为捷米特JM-PN-EIP。接下来作者就从该设备的功能及配置详细说明一下。 一&#xf…

Leetcode283. 移动零(java实现)

今天分享的题目是leetcode283移动0&#xff08;成都人狂喜&#xff09; 先来看下题目描述 这道题目我也看了官方的题解感觉有点冗余了。 那么我们就不用官方的题解了&#xff0c;分享下我们自己的解体方式。 解题步骤&#xff1a;1.找到非0元素&#xff0c;如果是非0进行记录2…

CentOS6.0安装telnet-server启用telnet服务

CentOS6.0安装telnet-server启用telnet服务 一步到位 fp"/etc/yum.repos.d" ; cp -a ${fp} ${fp}.$(date %0y%0m%0d%0H%0M%0S).bkup echo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.163.com/centos-vault/6.0/os/$basearch/http://mirrors.a…

永劫无间游戏辅助攻略:2024阵容搭配攻略大全!云手机辅助!

《永劫无间》是一款备受玩家喜爱的动作类游戏&#xff0c;其丰富的角色选择和多样的技能搭配让玩家在战斗中体验到了极大的乐趣。然而&#xff0c;要在竞争激烈的战场上脱颖而出&#xff0c;仅仅依靠基础的游戏理解是远远不够的。为了帮助广大玩家提升战斗力&#xff0c;本文将…

Ruby、Python、Java 开发者必备:Codigger之软件项目体检

在编程的广阔天地里&#xff0c;Ruby、Python 和 Java 开发者们各自凭借着独特的语言特性&#xff0c;构建着精彩纷呈的应用世界。然而&#xff0c;无论使用哪种语言&#xff0c;确保项目的高质量始终是至关重要的目标。而 Codigger 项目体检则成为了实现这一目标的得力助手&am…

python机器学习8--网络

1.超文本传输协议HTTP GET 在实际开发应用程序时&#xff0c;一定都会利用WiFi网络进行连接&#xff0c;再通过HTTP的方式读入后台的数据&#xff0c;并下载和显示在用户的PC上。这靠的是网络服务的技术&#xff0c;也就是大家提到的Web Service。而与HTTP服务器交换数据有两种…

【React】详解“最新”和“最热”切换与排序

文章目录 一、基本概念和初始化二、切换与排序功能的实现1. 函数定义和参数2. 设置活动 Tab3. 定义新列表变量4. 根据排序类型处理列表4.1 按时间降序排序4.2 按点赞数降序排序 5. 更新评论列表 三、渲染导航 Tab 和评论列表1. map 方法2. key 属性3. className 动态赋值4. onC…

数据结构(二叉树)

树 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀个特殊的结点&#xff0c;…

linux 桌面版安装原生微信的方式列举

linux 桌面版安装原生微信的方式列举 方法1&#xff1a;下载deb安装包安装 下载地址&#xff1a;https://github.com/lovechoudoufu/wechat_for_linux/releases 安装示例&#xff1a; sudo dpkg -i linuxqq_3.2.10-25765_amd64.deb方法2&#xff1a;Flatpak安装 安装flatp…

docker dotnet-dump离线部署

1.下载指定dotnet版本的dotnet-dump 示例地址&#xff1a; https://www.nuget.org/packages/dotnet-dump/3.1.141901#dependencies-body-tab 我本地测试的是netcore 3.1 2. 在本地解压 将文件解压出来。看到any目录,能看到我们要用的dotnet-dump文件 3. 将tools/netcoreapp2.…

qt实现智能家居(语言控制+服务器监听)

目录 介绍页面展示环境搭建开发工具开发环境百度token 连接服务器 介绍 qt智能家居&#xff08;语音控制&#xff09; 视频演示地址&#xff1a;进入哔哩哔哩 仓库地址&#xff1a;Gitee 源代码&#xff1a;百度网盘 默认密码是123456 页面展示 登录页面演示图 控制中心页…

SpringBoot运行流程源码分析

run方法核心流程 我们在启动SpringBoot的时候调用的是SpringApplication类的静态run方法。其核心流程如下图所示&#xff1a; 在run方法内完成了SpringApplication的声明周期。&#xff0c;这个过程涉及的几个核心类如下&#xff1a; SpringApplicationRunListeners&#xff…

一起学Java(1)-新建一个Gradle管理的Java项目

一时兴起&#xff0c;也为了便于跟大家同步学习进展和分享样例代码&#xff0c;遂决定创建一个全新的Java项目&#xff0c;并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点&#xff08;如Gradle等&#xff09;。为了紧跟技术潮流和提高操作效率&a…

鱼哥好书分享活动第28期:看完这篇《终端安全运营》终端安全企业基石,为你的终端安全保驾护航!

鱼哥好书分享活动第28期&#xff1a;看完这篇《终端安全运营》终端安全企业基石&#xff0c;为你的终端安全保驾护航&#xff01; 读者对象&#xff1a;主要内容&#xff1a;本书目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 在当前网络威胁日益复杂化的背景下&#xff…

linux nginx 命令记录,和转发

nginx: 查看配置文件&#xff1a;sudo find / -name nginx.conf 配置文件&#xff1a;/etc/nginx/nginx.conf 检查nginx.conf文件正确性 nginx -t -c /path/to/nginx.conf 或者 有nginx命令执行 nginx -t 查找nginx 可执行文件&#xff1a;which nginx /usr/sbin/nginx 安装Ng…

游戏UI设计大师课:3款游戏 UI 设计模板

很多时候&#xff0c;做设计需要找素材。假如是普通的 UI 界面或者 Banner 等等&#xff0c;在Dribbble、Pinterest、即时设计、Behance 翻看这样的网站&#xff0c;至少可以梳理出一些想法和思路。如果你需要一个更规范的指南&#xff0c;此时&#xff0c;在各种设计规范、官方…

.Net 检验信息采集及管理系统LIS,成熟的医院实验室管理系统源码

检验管理系统LIS实现了检验信息电子化、检验信息管理自动化&#xff0c;具备与医嘱双向沟通、采用条码管理手段、财务自动计费、仪器双向控制等重要功能特点。其工作流程为通过门诊医生和住院工作站提出检验申请&#xff0c;生成相应患者的化验条码标签&#xff0c;在生成化验单…