将手机作为服务器运行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://xiahunao.cn/news/3269401.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

分布式事务和2阶段提交

在当今世界&#xff0c;数据正在以惊人的速度增长。单台计算机的存储容量是有限的&#xff0c;因此需要将数据分布在多台机器或数据库上&#xff0c;这种技术被称为分布式技术。 互联网大厂中很多系统都在采用微服务架构。在这种架构中&#xff0c;每个微服务都管理自己的数据…

NXP i.MX 6系列处理器加入“产品长期供货计划”

近期&#xff0c;NXP&#xff08;恩智浦半导体&#xff09;的i.MX 6系列处理器已加入其“产品长期供货计划”&#xff0c;不同型号处理器的生命周期得到了10~15年的延长&#xff0c;确保了长期稳定的供货与维护。 &#xff08;NXP产品长期供货计划的目的&#xff0c;是给客户的…

pycharm关闭项目时,页面卡住了,怎么办?

问题 在关闭pycharm时&#xff0c;有时会遇到卡在退出进度条的界面&#xff0c;很讨厌&#xff0c;那我们要怎么办才能退出呢&#xff1f; 说明&#xff1a;本篇文章不是从根源上解决这个问题&#xff0c;无法避免这种情况。 解决方法 方法一&#xff1a; 在卡住时&#xf…

Redis 7.x 系列【27】集群原理之通信机制

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2 节点和节点2.1 集群拓扑2.2 集群总线协议2.3 流言协议2.4 心跳机制2.5 节点握…

【推研小灶】复旦与南大之间:一次独特的计算机保研之旅

写在前面 上午10点填完志愿等待复试通知&#xff0c;利用这段时间记录一下我简短的夏令营和预推免。今年变为线下之后&#xff0c;部分学校的入营情况、考核方式有明显变化。加上CS方向保研名额总体变多&#xff0c;形势有点小乱&#xff0c;甚至填报系统都在9.29中秋节当天&a…

Python如何获取终端尺寸?

os.get_terminal_size()&#xff0c;无差别获取当前终端长宽&#xff0c;让你为所欲为。 (笔记模板由python脚本于2024年07月27日 08:30:53创建&#xff0c;本篇笔记适合喜欢钻研的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Fre…

【Python系列】Parquet 数据处理与合并:高效数据操作实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

unity2D游戏开发08脚本化对象

创建Scriptable Object 在scripts文件夹下创建一个名为Sriptable Objects的文件夹,然后在文件夹里面创建一个名为Item的脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;//[CreateAssetMenu] 是一个属性(Attribute),用于告诉Unity编…

非UI设计师勿入,英文B端界面的确有可取之处.

作为中文的UI设计师&#xff0c;可以从英文B端界面中汲取设计灵感的几种方法&#xff1a; 观察布局和结构&#xff1a; 注意英文B端界面的布局和结构&#xff0c;包括导航栏、侧边栏、内容区域等。观察它们的排列方式、比例和空白间隙的运用&#xff0c;可以借鉴到自己的设计中…

GeoHash原理介绍以及在redis中的应用

GeoHash将二维信息编码成了一个一维信息。降维后有三个好处&#xff1a; 编码后数据长度变短&#xff0c;利于节省存储。利于使用前缀检索当分割的足够细致,能够快速的对双方距离进行快速查询 GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串。 1…

十一、【Python】基础教程-【Python全掌握】六大基础数据类型:布尔类型的终极指南

目录 一、基础类型“布尔型”处理方法 1. 直接赋值和使用 2. 布尔值的逻辑运算 3. 条件语句中的布尔值 4. 布尔值转换 5. 短路逻辑 6. 在循环和迭代中的使用 一、基础类型“布尔型”处理方法 在Python中&#xff0c;布尔类型是一种基本的数据类型&#xff0c;用于表示逻…

3DMAX一键藤球建模插件RattanBall使用方法

3DMAX一键藤球建模插件RattanBall使用教程 3DMAX藤球建模插件RattanBall&#xff0c;一键创建藤球模型&#xff0c;可以设置藤球大小、嵌套层数等&#xff0c;简单实用&#xff0c;一键生成&#xff01; 【适用版本】 3dMax2018.2及更高版本 【安装方法】 3DMAX一键藤球建模插…

Animate软件基础:创建及插入关键帧

这里讲一下Animate软件中创建或插入关键帧的基本方法。 FlashASer&#xff1a;Animate教程及作品源文件https://zhuanlan.zhihu.com/p/677437436 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff1a;Animat…

UE5.4内容示例(1)- 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例&#xff0c;可以用此示例熟悉一遍UE5的功能 模型与材质部分 StaticMeshes FBX_Import_Options Material_Advanced Material_Decals Material_Instances Material_N…

SpringBoot教程(十七) | SpringBoot集成swagger

SpringBoot教程&#xff08;十七&#xff09; | SpringBoot集成swagger 一、Swagger的简述二、SpringBoot集成swagger21. 引入依赖2. 新建SwaggerConfig配置类当 SpringBoot为2.6.x及以上时 需要注意 3.配置Swagger开关4. 给Controller 添加注解&#xff08;正式使用&#xff0…

Radxa ROCK 5B+开发板基本配置和上手测试

目录 1.ROCK 5B Plus开发板是什么&#xff1f;2.烧录官方系统3.设置ROOT用户4.开发板温度情况5.VNC远程桌面配置6.WIFI模块测速7.M2接口使用注意8.总结 1.ROCK 5B Plus开发板是什么&#xff1f; ROCK 5B&#xff08;即ROCK 5B Plus&#xff0c;本文用ROCK 5B指代&#xff09; …

AMQP-核心概念-4

本文参考以下链接摘录翻译&#xff1a; https://www.rabbitmq.com/tutorials/amqp-concepts 绑定 (Bindings) 绑定是交换机用来将消息路由到队列的规则。为了让一个交换机E将消息路由到队列Q&#xff0c;Q必须绑定到E。绑定可以有一个可选属性routing key&#xff0c;有一些类…

VTX326蓝牙TTS语音合成芯片赋能电子称重一体机人机交互新革新

引言 随着科技的飞速发展&#xff0c;零售业正经历着前所未有的变革。北京宇音天下科技有限公司&#xff0c;作为行业的领跑者&#xff0c;推出了革命性的VTX326蓝牙TTS语音合成芯片&#xff0c;为超市、水果店、熟食店、麻辣烫店等零售业态带来了智能化的全新体验。 市场与趋…

【C语言】文件操作详解!!!

目录 为什么要使用文件&#xff1f; 文件概念 1. 什么是文件&#xff1f; 2. 程序文件 3. 数据文件 4. 文件名 文件的使用 1. 文件指针 2. 文件的打开与关闭 文件的顺序读写 1. 顺序读写函数 2. scanf系列与printf系列 文件的随机读写 1. fseek 2. ftell 3. …