0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【技术案例】Android in Docker

Firefly开源团队 2025-04-02 16:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Docker 介绍

Docker 是一个开源的容器化平台,用于打包、分发和运行应用程序。它通过将应用及其所有依赖打包到独立的容器中,确保应用在不同环境中一致运行。Docker 提供快速部署、隔离性强和高效的资源利用,广泛用于开发、测试和生产环境中。

Android in Docker 介绍

宿主机系统中通过 docker 运行 Android 容器。利用 docker 的特性,我们可以将宿主机的设备节点映射到 Android 容器中,使容器和宿主机共用一套 kernel,从而实现Android 容器通过直通的方式调用 RK 平台相关的硬件加速单元:GPU、VPU、NPU、RGA 等。

33c23d6a-0f9d-11f0-9434-92fbcf53809c.png

Android in Docker 部署

宿主机部署

Firefly 整理多款机型对应的宿主机固件,用户只需根据所使用的具体机型选择匹配的固件版本,并进行升级,即可轻松完成宿主机的部署工作。

33d90946-0f9d-11f0-9434-92fbcf53809c.png

Android 容器部署

1、若宿主机已连接互联网,可通过 SCP 命令将 container 文件夹高效地传输至 Linux 宿主机的 /userdata/ 目录中

scp -r ./AIC/container root@xxx.xx.xx.xx:/userdata/

2、进入容器文件夹

cd /userdata/container

3、初次启动时,执行初始化脚本

./aic.sh-i

4、等待初始化完成后,执行

./aic.sh -r <安卓镜像.tgz> <容器数量>

演示:

33e7ec0e-0f9d-11f0-9434-92fbcf53809c.png

注意:网络默认是采用端口映射方式。

<宿主ip>:1100 --> <容器0>:5555<宿主ip>:1101 --> <容器1>:5555......

宿主机固件和 Android 容器均已上传至以下链接,请点击此处下载。提取码:1234

注:如需对宿主机或 Android 容器进行更深入的定制,可以联系业务团队获取完整的源代码。

调试及使用

容器管理

1、查看所有容器(包括已停止的容器)

docker ps -a

3406af36-0f9d-11f0-9434-92fbcf53809c.png

2、删除 Android 容器

docker rm -f

342a4586-0f9d-11f0-9434-92fbcf53809c.png

3、停止正在运行的容器

docker stop

344558f8-0f9d-11f0-9434-92fbcf53809c.png

4、启动一个已停止的容器

docker start

3461eff4-0f9d-11f0-9434-92fbcf53809c.png

容器调试

1、进入一个正在运行的容器

docker exec -it sh

348b7144-0f9d-11f0-9434-92fbcf53809c.png

2、看容器的 CPU 和内存使用情况

docker stats

34c231e8-0f9d-11f0-9434-92fbcf53809c.png

3、查看所有容器(包括已停止的容器)

docker cp 本地文件 容器ID:容器内路径

34ddedde-0f9d-11f0-9434-92fbcf53809c.png

4、局域网其他设备移动文件至 docker 容器

adb connect 宿主机IP:端口号adb -s 172.16.11.92:1102 push 本地文件 容器ID:容器内路径

34ecd88a-0f9d-11f0-9434-92fbcf53809c.png

注:Firefly默认 docker 网络部署为 docker0 网桥方式,即端口映射方案,如自行修改使用 macvlan 网络则 connect 命令需使用容器 IP 加端口号 5555

adb connect 容器IP:5555

5、网络画面传输

使用开源的 scrcpy:

https://github.com/Genymobile/scrcpy

scrcpy -s 容器IP : 端口号

35099344-0f9d-11f0-9434-92fbcf53809c.png

性能测试

设备:ITX-3588J(16+128)

固件:ITX-3588J_Ubuntu20.04-Minimal-r3104_v1.3.0c_241107.img

ITX-3588J 上同时运行 6个 Android 系统

1、让宿主机运行在性能模式

# 出现一个 Invalid argument 是正常的,不用管root@firefly:~# echo performance | tee $(find /sys/devices -name *governor)performancetee: /sys/devices/system/cpu/cpuidle/current_governor: Invalid argument


2、保持 CPU 的良好散热,保持温度在 80 摄氏度以下工作

root@firefly:~# cat /sys/class/thermal/*/temp54538563845638455461526925176952692root@firefly:~# cat /sys/bus/cpu/devices/cpu*/cpufreq/cpuinfo_cur_freq18000001800000180000018000002256000225600022560002256000

3、游戏测试演示:


在实际测试中,我们发现 RK3588 处理器在最高性能状态下,通过AIC(Android in Docker)技术能够高效并行运行多个 Android 系统。然而,当同时运行 6个 Android 容器时,由于它们共享 CPU 资源,若这些容器对 CPU 的需求同时激增,可能会对用户体验造成影响。相比之下,运行 4个 Android 容器时,CPU 的压力较为适中,各容器间的影响也相对较小。因此,根据具体的使用场景和需求,可以灵活决定开启容器的数量。

在 AIC 技术的卓越加持下,Firefly 服务器潜能得到全面释放,使用搭载 RK3588 处理器的 Firefly B1 服务器,在 10 节点配置下,每节点独立运行 6 个 Android 系统,实现了 60个 Android 系统的并行操作,彰显 AIC 技术的强大实力。升级至 72 节点的 B2 服务器,更是高达 432 个系统,显著拓展了运行 Android 的容器数量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3986

    浏览量

    133088
  • 开源
    +关注

    关注

    3

    文章

    4038

    浏览量

    45579
  • Docker
    +关注

    关注

    0

    文章

    526

    浏览量

    14026
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用 Docker容器化技术

    对于开发人员来说,Docker肯定都不陌生,今天小编带大家重新学习一下Docker。 什么是 Docker 官话: Docker 是一种开源的容器化平台,它可以帮助开发者将应用程序与其
    的头像 发表于 09-30 11:24 1.7w次阅读

    ARM平台实现Docker容器技术

    或网络接口进行通信。图1(2)Docker的作用更高效的利用系统资源:Docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机
    发表于 07-17 11:05

    ARM平台实现Docker容器技术

    或网络接口进行通信。 图1(2)Docker的作用更高效的利用系统资源:Docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机
    发表于 07-25 14:36

    Docker技术有什么应用背景

    Docker技术的一个应用背景
    发表于 08-02 14:19

    基于docker技术的工业App架构是如何构成的

    基于docker技术的工业App架构是如何构成的?
    发表于 09-28 06:35

    Docker是什么?

    Edge技术的重要组成部分。那么Docker到底有什么本事,能在Iot领域如此重要呢?举个例子,无论你是什么CPU,什么操作系统,什么硬件条件,下面一条命令,就可以让你的PC,嵌入式设备,跑上一...
    发表于 10-28 07:11

    RK3399 docker无法加载IMAGE ID是为什么?

    lsdocker_image.tar.bz2MD5.docker_image.tar.bz2.txtok3399_android_16.04.tar.bz2root@ubuntu:~/workspace/rk3399# docker load -i ok3399_
    发表于 12-30 07:05

    在鸿蒙上能安装docker吗?

    android是不支持安装docker的,想了解下鸿蒙是否支持安装docker
    发表于 03-21 16:32

    Docker—简介与镜像用法

    Docker为应用打包、部署平台,而非单纯的虚拟化技术docker容器的优势: 对于开发人员:Build once、Run anywhere。 对于运维人员:Configure once
    发表于 11-25 16:28 926次阅读
    <b class='flag-5'>Docker</b>—简介与镜像用法

    docker技术入门与实战

    入门docker的首本书,系统化掌握容器技术
    发表于 06-09 14:38 0次下载

    Docker镜像的详细讲解

    本文是对 Docker 镜像的详细讲解,讲解了如何安装 Docker、配置 Docker 镜像加速以及操作 Docker 镜像。希望对大家有所帮助~
    的头像 发表于 08-02 10:00 2892次阅读

    docker 搜索镜像,docker查看镜像详细信息(docker下载镜像命令)

    Docker Hub是集中管理的Docker镜像注册中心。通过Docker 用户可以在注册中心搜索、下载和使用CLI命令行工具中的镜像。以下是常用的Docker命令搜索镜像:
    的头像 发表于 07-19 09:46 2749次阅读

    docker部署mysql的坏处

    Docker 是一种虚拟化技术,它允许开发人员在容器内打包应用程序及其所有依赖项,从而实现在不同环境中运行相同的应用程序的能力。然而,在使用 Docker 部署 MySQL 时,也存在一些潜在
    的头像 发表于 11-23 09:29 2180次阅读

    docker核心组件有哪些

    Docker 是一种开源的容器化平台,它能够实现将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速、可重复、可扩展的部署和管理。Docker 的核心组件包括 Docker Engine
    的头像 发表于 11-23 09:47 2761次阅读

    ARM平台实现Docker容器技术

    什么是Docker? (1)Docker的架构 Docker是一个开源的应用容器引擎,让开发者可打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上
    的头像 发表于 03-07 13:48 1470次阅读
    ARM平台实现<b class='flag-5'>Docker</b>容器<b class='flag-5'>技术</b>