Телефоны Android на базе Docker: база знаний, которую можно носить с собой (1)
Телефоны Android на базе Docker: база знаний, которую можно носить с собой (1)

В этой статье рассказывается о том, как с помощью Docker попытаться превратить мобильный телефон пятилетней давности в портативную локализованную базу знаний.

напиши впереди

В этой статье я использовал мобильный телефон K20 Pro пятилетней давности, купленный на подержанной платформе в прошлом году.

Устройство, использованное для экспериментов: K20 Pro.
Устройство, использованное для экспериментов: K20 Pro.

Чтобы он работал стабильно и непрерывно, я также подготовил для него «улучшенную версию» теплоотводящей оболочки.

Усовершенствованное «охлаждающее оборудование»
Усовершенствованное «охлаждающее оборудование»

Предполагаемый сценарий ежедневного использования также очень прост: не требуется ни карты, ни Интернета, он подключается к компьютеру с помощью кабеля для передачи данных Type-C, и вы можете получить доступ к поставщику услуг, работающему на телефоне, через «локальное подключение».

Поскольку сам мобильный телефон поставляется с «ИБП» (батареей), даже если внезапно отключится питание, потери данных не произойдет. Кроме того, мобильный телефон имеет характеристики пятилетней давности, даже если он таков. куплено за большую сумму денег, оно не пропадет. Extreme Edition стоит недорого, но вы легко можете получить 8-ядерное устройство с 12 ГБ памяти и жестким диском на 500 ГБ. Есть даже «полноэкранный режим», который можно использовать для отладки или отображения контента, — полный стеклянный экран без каких-либо отверстий для камеры.

Что касается производительности, то, если ее можно полностью настроить нормально, она должна быть очень рентабельной, но это потребует некоторых усилий, поэтому эта статья является первой, в которой сначала проверяется осуществимость.

Большая часть материала в этой статье взята из проектов с открытым исходным кодом. CGCL-codes/Android-Container,Спасибо автору за его труд。нопроектс этого моментадляих уже три Годнет обновлений,Лично я рекомендую делать только проверкуиспользовать,Точно так же, как решение использовать в этой статье.

Почему стоит выбрать этот K20 Pro

Просматривая предыдущие статьи, я обнаружил, что связываюсь с телефонами Xiaomi почти каждый год.

По разным причинам текущая экосистема разработчиков Xiaomi уже не так открыта, как раньше, что затрудняет доступ разработчиков. Bootloader Разрешения, различные интересные функции запланированы на внутреннее тестирование и даже GitHub В Интернете появилось несколько возмутительных проектов, таких как “Банк вопросов для вступительных экзаменов в колледж Xiaomi”,решить разблокировкущеткамашина Разрешения Большое количество тестовых вопросов из восьми частей, которые необходимо пройти.;“Проект разблокировки Xiaomi”,“Коллекция решений для разблокировки Xiaomi” Ждите проекта.

Хотя, похоже, нынешние модели мобильных телефонов Xiaomi уже не годятся для выбрасывания.но,мобильные телефоны прошлого,Можно ли превратить его в более интересное устройство?,Как насчет того, чтобы заняться чем-нибудь более интересным?

Ведь мобильные телефоны Xiaomi в прошлом были еще очень хороши! Такие прилагательные к продукту, как «вратарь», «вратарь» и «маленький Кинг-Конг», не только содержат маркетинговые элементы, но и включают в себя похвалу болельщиков.

Подготовка

На этот раз подготовка очень проста,Первый — «мобильный телефон, который можно бросить».,Я выбрал K20 Pro, вы можете выбрать понравившееся устройство.

Затем есть «компьютер», который помогает мобильному телефону обрести новую жизнь. Удобнее будет устройство с настольной системой Windows или macOS.

наконец,нужен один Type-C Кабель для передачи данных порта позволяет подключить мобильный телефон к компьютеру.

Шаг 1. Разблокируйте разрешения загрузчика на вашем телефоне

Вы можете обратиться к предыдущим записям о подбрасывании мобильного телефона, которыми я поделился выше, чтобы разблокировать телефон, чтобы мы могли прошить TWRP и прошить новый образ системы Android, используемый Docker в последующем процессе.

Если используемое вами устройство также K20 Pro(Mi 9T Pro), который можно скачать здесь. Загрузочный образ TWRP

Обновить BootLoader устройства очень просто. Вам нужно всего лишь выполнить на стороне компьютера следующие две команды:

Язык кода:bash
копировать
fastboot flash recovery twrp.img
fastboot reboot

Шаг 2. Перенесите образ системы, используемый устройством, по порядку.

существоватьНижняя часть документа подкаталога проекта,Нам удалось найти образ Android для проверки.

Нам нужно сначала прошить официальную версию от Xiaomi miui_RAPHAEL_V12.0.5.0.QFKCNXM_d03168fb55_10.0.zip Зеркало, это зеркало опубликовано с 2020 Год 10 луна 18 день, исходя из Android 10 строить。еслипроектстраницаскачатьотносительно медленный,тыОфициальное изображение можно скачать здесь.

После прошивки официального образа мы можем прошить образ, созданный автором проекта. PixelExperience_raphael-10.0-20201204-0354-UNOFFICIAL-48bit-docker-criu.zip,Проведем функциональную проверку.

над этим документом,Автор кратко объясняет, как построить образ,而существоватьДокументы в другом каталоге,содержит другую, более важную информацию,В том числе и как настроить образ ядра,Приди и уступи дорогу Docker способен бежать.

После завершения обновления образа нам необходимо вручную улучшить операционную среду и запустить Docker.

Шаг 3. Восстановите рабочую среду Docker.

Сначала выполните в терминале командной строки:

Язык кода:bash
копировать
adb shell

После входа в интерактивный терминал введите следующую команду, чтобы мы могли изменить каталог только для чтения в системе:

Язык кода:bash
копировать
mount -o rw,remount /

затем,мы будемКаталог проекта Dockerипроект files каталог files/dockerd.sh использовать adb push команда, отправленная на мобильный телефон /system/bin/ каталог, базовый Docker Операционная среда готова.

Язык кода:bash
копировать
# adb push ./dockerd.sh /system/bin/dockerd.sh

./dockerd.sh: 1 file pushed, 0 skipped. 7.7 MB/s (4016 bytes in 0.000s)

...

Чтобы мы работали Docker Программа более удобна и мы можем это исправить вручную. docker-compose команда, в Compose проектизопубликовать страницу,нас找到最新版本из docker-compose-linux-aarch64 документ,скачать,И перенесите его в среду мобильного телефона указанным выше способом.,инастраивать正确из执行Разрешения。

Язык кода:bash
копировать
# adb push ./docker-compose-linux-aarch64 /system/bin/docker-compose

./docker-compose-linux-aarch64: 1 file pushed, 0 skipped. 32.2 MB/s (61276577 bytes in 1.815s)

adb shell su -c "chmod +x /system/bin/docker-compose"

улучшенный dockerd.sh

Мой отзыв об оригинальном проекте dockerd.sh Сделал несколько простых корректировок:

Язык кода:bash
копировать
#!/system/bin/sh

mount -o rw,remount /

# создавать Docker Связанное Оглавление
root_dirs=("/var" "/run" "/tmp" "/opt" "/usr" "/system/etc/docker")
for dir in "${root_dirs[@]}"; do
    if [ ! -d "$dir" ]; then
        mkdir "$dir"
    fi
done


# создавать /data Оглавление Связанное Оглавление
data_dirs=("/data/var:/var" "/data/run:/run" "/data/tmp:/tmp" "/data/opt:/opt" "/data/etc/docker:/etc/docker")
for dir in "${data_dirs[@]}"; do
    # Разделить пути Оглавления и точки монтирования
    paths=$(echo "$dir" | tr ':' ' ')
    data_dir=$(echo "$paths" | cut -d ' ' -f 1)
    mount_dir=$(echo "$paths" | cut -d ' ' -f 2)
    # если /data/var Оглавление существует, наведите порядок в Оглавлении. ./run Оглавление
    if [ "$data_dir" = "/data/var" ] && [ -d "$data_dir" ]; then
        rm -rf /data/var/run
    fi
    # пытатьсясоздаватьи挂载Оглавление
        mkdir -p "$data_dir"
        mount --bind "$data_dir" "$mount_dir"
        echo "mount $data_dir to $mount_dir"
done


# создавать /dev Оглавление Связанное Оглавление,и挂载 cgroup
cgroup_dirs=("cpu" "cpuacct" "devices" "freezer" "hugetlb" "net_cls" "net_prio" "perf_event" "pids" "rdma")
for dir in "${cgroup_dirs[@]}"; do
    if [ ! -d "/dev/$dir" ]; then
        mkdir -p "/dev/$dir"
        case "$dir" in
            "cpu"|"cpuacct")
            ;;
        *)
            echo "mount -t cgroup -o $dir none /dev/$dir"
            mount -t cgroup -o $dir none /dev/$dir
            ;;
        esac
    fi
done


# для Docker Добавить таблицу маршрутизации
ip_rule1=$(ip rule | grep "from all lookup main" | wc -l)
if [ "$ip_rule1" -ne 1 ]; then
    ip rule add pref 1 from all lookup main
fi
ip_rule2=$(ip rule | grep "from all lookup default" | wc -l)
if [ "$ip_rule2" -ne 1 ]; then
    ip rule add pref 2 from all lookup default
fi


# настраивать Docker Зеркальное ускорение
echo "{\"registry-mirrors\":[\"https://mirror.baidubce.com\"],\"experimental\":true}" > /etc/docker/daemon.json
# Отключите брандмауэр по умолчанию и разрешите внешний доступ. Docker контейнерный порт
setenforce 0
# запускать Docker
export DOCKER_RAMDISK=true
dockerd --add-runtime crun=/bin/crun -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock > /dev/null 2>&1 &

Из комментариев должно быть очень понятно, что вы сделали, поэтому я не буду здесь вдаваться в подробности. Когда мы перестроим образ, мы проведем дальнейшую оптимизацию (встроенная & оптимизация).

Шаг 4. Запустите фоновый процесс Docker.

После того, как мы перенесли все файлы на телефон, в adb shell среда docker Выполнить подтягивание, Docker Операционная среда готова.

Язык кода:bash
копировать
# dockerd.sh                                                                                                                                                                       

mount /data/var to /var
mount /data/run to /run
mount /data/tmp to /tmp
mount /data/opt to /opt
mount /data/etc/docker to /etc/docker
mount -t cgroup -o devices none /dev/devices
mount -t cgroup -o freezer none /dev/freezer
mount -t cgroup -o hugetlb none /dev/hugetlb
mount -t cgroup -o net_cls none /dev/net_cls
mount -t cgroup -o net_prio none /dev/net_prio
mount -t cgroup -o perf_event none /dev/perf_event
mount -t cgroup -o pids none /dev/pids
mount -t cgroup -o rdma none /dev/rdma

В это время выполните docker info можно увидеть docker Основные условия эксплуатации:

Язык кода:bash
копировать
# docker info

Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 7
 Server Version: 19.03.13
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc crun
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.14.180-F1xy-0.19-pe-ten/71771c10be
 OSType: linux
 Architecture: aarch64
 CPUs: 8
 Total Memory: 11.25GiB
 Name: localhost
 ID: LLQY:OOXR:BKTQ:M2ZP:MGUJ:Q3NY:RPZL:EV7D:YGQY:H45D:BKUY:RXMA
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: true
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://mirror.baidubce.com/
 Live Restore Enabled: false
 Product License: Community Engine

WARNING: API is accessible on http://0.0.0.0:2375 without encryption.
         Access to the remote API is equivalent to root access on the host. Refer
         to the 'Docker daemon attack surface' section in the documentation for
         more information: https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface

Шаг 5. Создайте приложение Docker.

После того, как среда Docker будет готова, давайте проверим, может ли работать приложение Docker. Сначала создайте каталог для последующего хранения данных приложения Docker:

Язык кода:bash
копировать
mkdir -p kb
cd kb

Затем создайте в каталоге файл со следующим содержимым docker-compose.yml Конфигурационный файл:

Язык кода:yaml
копировать
version: '3'

services:

  wordpress:
    image: soulteary/sqlite-wordpress:6.5.2
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./wordpress:/var/www/html

Да, эта конфигурация взята из проекта soulteary/docker-sqlite-wordpress,существовать之前из文章《WordPress попрощаться MySQL:Docker SQLite WordPress》、《Подробности упаковки образа WordPress SQLite Docker》середина,Это более подробно,Я не буду подробно останавливаться на этом здесь.

когда мы будем готовы docker-compose.yml После этого выполните docker-compose up -d

Язык кода:bash
копировать
# docker-compose up -d
WARN[0000] /kb/docker-compose.yml: `version` is obsolete 
[+] Running 1/0
 ✔ Container kb-wordpress-1  Running 

WordPress быстро запустился через контейнер.

запускатьприложениеназад,Мы используем следующую команду,Вы можете просто убедиться, что служба работает правильно:

Язык кода:bash
копировать
docker exec kb-wordpress-1 curl -L http://0.0.0.0:80

Неудивительно, что мы получим результаты, подобные следующим:

использовать проверку командной строки Docker на мобильном телефоне
использовать проверку командной строки Docker на мобильном телефоне

上面из图片середина,насиспользовать Командная строка для проверки WordPress Программа на рендерах HTML странице, хотя время выполнения очень велико (требуется устранение неполадок или пересборка). Android проверка), но доказал Android беги дальше Docker Программа осуществима.

Шаг 6. Как получить доступ к приложениям мобильного телефона на компьютере

Android Debug Bridge(ADB)середина有一个很有用из命令叫做 forward,Мы можем передать эту команду,Откройте порт на компьютере и порт на мобильном телефоне.

Язык кода:bash
копировать
 forward --list           list all forward socket connections

 forward [--no-rebind] LOCAL REMOTE
     forward socket connection using:
       tcp:<port> (<local> may be "tcp:0" to pick any open port)
       localabstract:<unix domain socket name>
       localreserved:<unix domain socket name>
       localfilesystem:<unix domain socket name>
       dev:<character device name>
       jdwp:<process pid> (remote only)
       vsock:<CID>:<port> (remote only)
       acceptfd:<fd> (listen only)

 forward --remove LOCAL   remove specific forward socket connection

 forward --remove-all     remove all forward socket connections

Команда поддерживает четыре метода вызова параметров:

  • Получить все сопоставления пересылки в виде списка.
  • Выполнение переадресации локальных и удаленных портов
  • Отменить сопоставление пересылки локального порта
  • Отменить все сопоставления переадресации

Давайте возьмем реальную ситуацию в качестве примера. В приведенном выше примере мы будем использовать мобильный телефон. WordPress Запуск по умолчанию 80 Порт, сопоставленный с мобильным телефоном 8080 порт. Если мы поместим компьютер 8088 порт и мобильный телефон 8080 Порт открыт, значит нам нужно выполнить следующую команду:

Язык кода:bash
копировать
adb forward tcp:8088 tcp:8080

После выполнения команды мы можем получить к ней доступ в браузере. http://localhost:8088 Давайте получим доступ к приложению на вашем телефоне.

UseComputer напрямую обращается к приложению мобильного контейнера
UseComputer напрямую обращается к приложению мобильного контейнера

Конечно, вы также столкнетесь с той же проблемой, что и выше, и доступ к приложению займет много времени. Это проблема, которую необходимо продолжать исследовать и решать. Ведь кроме PHP Все ответы на пути к ресурсам вне выполнения программы находятся в ms уровень.

конечно,еслиты希望这台设备беги дальшеиз Docker Программой можно поделиться в локальной сети, просто подключите мобильный телефон. Wi-Fi, а затем получить доступ к мобильному телефону в локальной сети в браузере IP Достаточно адреса и соответствующего порта программы.

Использовать контейнер доступа к локальной сети в приложении для мобильного телефона
Использовать контейнер доступа к локальной сети в приложении для мобильного телефона

Разве это не очень просто?,еслиты想离线本地化использовать,Нет необходимости в сети мобильной связи,еслиты想局域网共享,Получите недорогой и экономичный Linux-сервер, пусть подключится к Wi-Fi.

наконец

На этом цели проверки, упомянутые в этой статье, выполнены. В следующих связанных статьях давайте поговорим о проблемах с производительностью, возникающих в этой статье, и о том, как их решить. 2024 Год Упрощенная поддержка сборки Docker Запускаем ядро ​​и образ Android.

Увидимся в следующей статье.

--EOF


У нас есть небольшая группа по метанию, в которой мы собираем друзей, которые любят бросать и честны друг с другом.

Мы будем вместе говорить о программном и аппаратном обеспечении, HomeLab, программировании, вопросах жизни и рабочего места, а также время от времени делимся некоторой технической информацией в группе.

Что касается стандартов поиска друзей, пожалуйста, обратитесь к следующей статье:

Су Ян: Новым друзьям: голосуйте за жизнь и продолжайте искать лучших друзей

Конечно, добавляя друзей через следующую статью, пожалуйста, укажите свое настоящее имя, компанию или школу, укажите источник и цель и цените время друг друга :D

Су Ян: О том, как объединять людей в группы.


Эта статьяиспользовать「подпись 4.0 интернациональность (CC BY 4.0)» Лицензионное соглашение, вы можете его перепечатывать или повторно изменять, но с указанием источника. подпись 4.0 интернациональность (CC BY 4.0)

Автор статьи: Су Ян

Время создания: 2024Год05луна03день

Статистическое количество слов: 9721 слово.

Время чтения: 20 минут на чтение.

Ссылка на эту статью: https://soulteary.com/2024/05/03/docker-powered-android-phone-knowledge-base-you-can-carry-with-you-1.html

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose