В этой статье рассказывается о том, как с помощью Docker попытаться превратить мобильный телефон пятилетней давности в портативную локализованную базу знаний.
В этой статье я использовал мобильный телефон K20 Pro пятилетней давности, купленный на подержанной платформе в прошлом году.
Чтобы он работал стабильно и непрерывно, я также подготовил для него «улучшенную версию» теплоотводящей оболочки.
Предполагаемый сценарий ежедневного использования также очень прост: не требуется ни карты, ни Интернета, он подключается к компьютеру с помощью кабеля для передачи данных Type-C, и вы можете получить доступ к поставщику услуг, работающему на телефоне, через «локальное подключение».
Поскольку сам мобильный телефон поставляется с «ИБП» (батареей), даже если внезапно отключится питание, потери данных не произойдет. Кроме того, мобильный телефон имеет характеристики пятилетней давности, даже если он таков. куплено за большую сумму денег, оно не пропадет. Extreme Edition стоит недорого, но вы легко можете получить 8-ядерное устройство с 12 ГБ памяти и жестким диском на 500 ГБ. Есть даже «полноэкранный режим», который можно использовать для отладки или отображения контента, — полный стеклянный экран без каких-либо отверстий для камеры.
Что касается производительности, то, если ее можно полностью настроить нормально, она должна быть очень рентабельной, но это потребует некоторых усилий, поэтому эта статья является первой, в которой сначала проверяется осуществимость.
Большая часть материала в этой статье взята из проектов с открытым исходным кодом. CGCL-codes/Android-Container,Спасибо автору за его труд。нопроектс этого моментадляих уже три Годнет обновлений,Лично я рекомендую делать только проверкуиспользовать,Точно так же, как решение использовать в этой статье.
Просматривая предыдущие статьи, я обнаружил, что связываюсь с телефонами Xiaomi почти каждый год.
По разным причинам текущая экосистема разработчиков Xiaomi уже не так открыта, как раньше, что затрудняет доступ разработчиков. Bootloader Разрешения, различные интересные функции запланированы на внутреннее тестирование и даже GitHub В Интернете появилось несколько возмутительных проектов, таких как “Банк вопросов для вступительных экзаменов в колледж Xiaomi”,решить разблокировкущеткамашина Разрешения Большое количество тестовых вопросов из восьми частей, которые необходимо пройти.;“Проект разблокировки Xiaomi”,“Коллекция решений для разблокировки Xiaomi” Ждите проекта.
Хотя, похоже, нынешние модели мобильных телефонов Xiaomi уже не годятся для выбрасывания.но,мобильные телефоны прошлого,Можно ли превратить его в более интересное устройство?,Как насчет того, чтобы заняться чем-нибудь более интересным?
Ведь мобильные телефоны Xiaomi в прошлом были еще очень хороши! Такие прилагательные к продукту, как «вратарь», «вратарь» и «маленький Кинг-Конг», не только содержат маркетинговые элементы, но и включают в себя похвалу болельщиков.
На этот раз подготовка очень проста,Первый — «мобильный телефон, который можно бросить».,Я выбрал K20 Pro, вы можете выбрать понравившееся устройство.
Затем есть «компьютер», который помогает мобильному телефону обрести новую жизнь. Удобнее будет устройство с настольной системой Windows или macOS.
наконец,нужен один Type-C Кабель для передачи данных порта позволяет подключить мобильный телефон к компьютеру.
Вы можете обратиться к предыдущим записям о подбрасывании мобильного телефона, которыми я поделился выше, чтобы разблокировать телефон, чтобы мы могли прошить TWRP и прошить новый образ системы Android, используемый Docker в последующем процессе.
Если используемое вами устройство также K20 Pro(Mi 9T Pro), который можно скачать здесь. Загрузочный образ TWRP。
Обновить BootLoader устройства очень просто. Вам нужно всего лишь выполнить на стороне компьютера следующие две команды:
fastboot flash recovery twrp.img
fastboot reboot
существоватьНижняя часть документа подкаталога проекта,Нам удалось найти образ 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.
Сначала выполните в терминале командной строки:
adb shell
После входа в интерактивный терминал введите следующую команду, чтобы мы могли изменить каталог только для чтения в системе:
mount -o rw,remount /
затем,мы будемКаталог проекта Dockerипроект files каталог files/dockerd.sh использовать adb push
команда, отправленная на мобильный телефон /system/bin/
каталог, базовый Docker Операционная среда готова.
# 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
документ,скачать,И перенесите его в среду мобильного телефона указанным выше способом.,инастраивать正确из执行Разрешения。
# 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
Сделал несколько простых корректировок:
#!/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 &
Из комментариев должно быть очень понятно, что вы сделали, поэтому я не буду здесь вдаваться в подробности. Когда мы перестроим образ, мы проведем дальнейшую оптимизацию (встроенная & оптимизация).
После того, как мы перенесли все файлы на телефон, в adb shell
среда docker
Выполнить подтягивание, Docker Операционная среда готова.
# 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 Основные условия эксплуатации:
# 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
После того, как среда Docker будет готова, давайте проверим, может ли работать приложение Docker. Сначала создайте каталог для последующего хранения данных приложения Docker:
mkdir -p kb
cd kb
Затем создайте в каталоге файл со следующим содержимым docker-compose.yml
Конфигурационный файл:
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
:
# docker-compose up -d
WARN[0000] /kb/docker-compose.yml: `version` is obsolete
[+] Running 1/0
✔ Container kb-wordpress-1 Running
WordPress быстро запустился через контейнер.
запускатьприложениеназад,Мы используем следующую команду,Вы можете просто убедиться, что служба работает правильно:
docker exec kb-wordpress-1 curl -L http://0.0.0.0:80
Неудивительно, что мы получим результаты, подобные следующим:
上面из图片середина,насиспользовать Командная строка для проверки WordPress Программа на рендерах HTML странице, хотя время выполнения очень велико (требуется устранение неполадок или пересборка). Android проверка), но доказал Android беги дальше Docker Программа осуществима.
Android Debug Bridge(ADB)середина有一个很有用из命令叫做 forward
,Мы можем передать эту команду,Откройте порт на компьютере и порт на мобильном телефоне.
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
Порт открыт, значит нам нужно выполнить следующую команду:
adb forward tcp:8088 tcp:8080
После выполнения команды мы можем получить к ней доступ в браузере. http://localhost:8088
Давайте получим доступ к приложению на вашем телефоне.
Конечно, вы также столкнетесь с той же проблемой, что и выше, и доступ к приложению займет много времени. Это проблема, которую необходимо продолжать исследовать и решать. Ведь кроме 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