首页
商城
  • English
  • 简体中文
首页
商城
  • English
  • 简体中文
  • 产品系列

    • FPGA+ARM

      • GM-3568JHF

        • 一、简介

          • GM-3568JHF 简介
        • 二、快速开始

          • 00 前言
          • 01 环境搭建
          • 02 编译说明
          • 03 烧录指南
          • 04 调试工具
          • 05 软件更新
          • 06 查看信息
          • 07 测试命令
          • 08 应用编译
          • 09 源码获取
        • 三、外设与接口

          • 01 USB
          • 02 显示与触摸
          • 03 以太网
          • 04 WIFI
          • 05 蓝牙
          • 06 TF-Card
          • 07 音频
          • 08 串口
          • 09 CAN
          • 10 RTC
        • 四、应用开发

          • 01 UART读写案例
          • 02 按键检测案例
          • 03 LED灯闪烁案例
          • 04 MIPI屏幕检测案例
          • 05 读取 USB 设备信息案例
          • 06 FAN 检测案例
          • 07 FPGA FSPI 通信案例
          • 08 FPGA DMA 读写案例
          • 09 GPS调试案例
          • 10 以太网测试案例
          • 11 RS485读写案例
          • 12 FPGA IIC 读写案例
          • 13 PN532 NFC读卡案例
          • 14 TF卡读写案例
        • 五、QT开发

          • 01 ARM64交叉编译器环境搭建
          • 02 QT 程序加入开机自启服务
        • 六、RKNN_NPU开发

          • 01 RK3568 NPU 概述
          • 02 开发环境搭建
          • 运行官方 YOLOv5 示例
        • 七、FPGA开发

          • ARM与FPGA通讯
          • FPGA开发手册
        • 八、其他

          • 01 根目录文件系统的修改
          • 02 系统自启服务
        • 九、资料下载

          • 资料下载
    • ShimetaPi

      • M4-R1

        • 一、简介

          • M4-R1简介
        • 二、快速上手

          • 01 OpenHarmony概述
          • 02 镜像烧录
          • 03 应用开发快速上手
          • 04 设备开发快速上手
        • 三、应用开发

          • 01 ArkUI

            • 1 ArkTS语言简介
            • 2 UI 组件-Row 容器介绍
            • 3 UI 组件-Column 容器介绍
            • 4 UI 组件-Text 组件
            • 5 UI 组件-Toggle 组件
            • 6 UI 组件-Slider 组件
            • 7 UI 组件-Animation 组件&Transition 组件
          • 02 资料获取

            • 1 OpenHarmony 官方资料
          • 03 开发须知

            • 1 Full-SDK替换教程
            • 2 引入和使用三方库
            • 3 HDC调试
            • 4 命令行恢复出厂模式
            • 5 升级App为system权限
          • 04 构建第一个应用

            • 1 构建第一个ArkTs应用-HelloWorld
          • 05 案例

            • 01 串口调试助手应用案例
            • 02 手写板应用案例
            • 03 数字时钟应用案例
            • 04 WIFI 信息获取应用案例
        • 四、设备开发

          • 1 Ubuntu环境开发

            • 01 环境搭建
            • 02 下载源码
            • 03 编译源码
          • 2 使用DevEco Device Tool 工具

            • 01 工具简介
            • 02 开发环境的搭建
            • 03 导入SDK
            • 04 HUAWEI DevEco Tool 功能介绍
        • 五、内核外设与接口

          • 01 指南
          • 02 设备树介绍
          • 03 NAPI 入门
          • 04 ArkTS入门
          • 05 NAPI开发实战演示
          • 06 GPIO介绍
          • 07 I2C通讯
          • 08 SPI通信
          • 09 PWM 控制
          • 10 串口通讯
          • 11 TF卡
          • 12 屏幕
          • 13 触摸
          • 14 Ethernet(以太网)
          • 15 M.2 硬盘
          • 16 音频
          • 17 WIFI & BT
          • 18 摄像头
        • 六、资料下载

          • 资料下载
      • M4-R2

        • 一、产品简介

          • M4-R2 产品简介
        • 二、快速上手

          • 快速上手
        • 三、Android 系统

          • 1 快速上手

            • Android系统烧录与启动
            • 开发环境搭建
            • ADB调试与日志分析
            • SDK下载与编译环境搭建
            • Android系统基础操作
          • 2 SDK 编译

            • Android_SDK编译
            • Android构建系统与增量编译
          • 3 系统开发

            • Android系统定制
          • 4 应用开发

            • Android应用开发入门
            • Android JNI开发
          • 5 驱动与 HAL

            • Android HAL开发
          • 6 AI 与 NPU

            • Android NPU使用指南
        • 四、硬件参考

          • 核心板参数
          • 底板接口定义
          • 40PIN引脚定义
          • 电源管理
        • 五、常见问题与故障排除

          • 系统启动问题
          • 外设驱动问题
          • 网络连接问题
          • 显示问题
          • 常见编译错误
        • 六、应用方案参考

          • 智能显示终端方案
          • 边缘AI计算方案
          • 工业控制方案
          • NVR安防监控方案
          • 智能家居网关方案
        • 七、资料下载

          • 资料下载
      • M5-R2A

        • 一、产品简介

          • M5-R2A 产品简介
        • 二、快速上手

          • 系统烧录指南
          • 开发环境搭建
          • 快速上手
          • SDK下载与编译环境搭建
        • 四、Debian/Ubuntu 系统

          • 1 快速上手

            • 系统启动与基础操作
            • 网络配置与SSH
            • 软件包管理与更新
            • Debian 与 Ubuntu 镜像差异
          • 2 系统开发

            • Linux SDK编译
            • 内核配置与裁剪
            • 设备树详解与实践
            • 根文件系统构建
          • 3 外设驱动开发

            • GPIO驱动与控制
            • I2C驱动开发
            • SPI驱动开发
            • UART串口驱动
            • PWM驱动
            • ADC驱动
            • CAN/CAN-FD驱动
            • USB主机与设备驱动
            • SDMMC/eMMC驱动
            • 以太网GMAC驱动
            • 音频驱动
            • 摄像头Camera驱动
            • 触摸屏驱动
            • 显示DRM驱动
            • HDMI显示驱动
            • PCIe驱动
            • WiFi/蓝牙驱动
            • 看门狗WDT驱动
            • 热敏传感器THERMAL驱动
          • 4 应用开发

            • C/C++应用开发入门
            • Python应用开发
            • Qt嵌入式开发实战
            • GStreamer多媒体开发
            • 网络编程与应用
            • 文件系统与存储
          • 5 AI 与 NPU

            • NPU架构与性能概览
            • RKNN Toolkit2安装与使用
            • 模型转换与量化
            • 分类模型部署(LeNet/ResNet)
            • 目标检测部署(YOLOv5/v7/v8)
            • 语义分割部署
            • 人脸检测与识别
            • OCR文字识别
            • NPU性能调优与调试
          • 6 多媒体

            • 显示框架
            • 摄像头应用
            • 视频编解码(MPP)
            • 音频开发与ALSA
            • RGA图像处理
          • 7 性能优化与调试

            • 系统启动时间优化
            • CPU/GPU/NPU调优
            • 内存与存储优化
            • 功耗分析与优化
            • 调试工具使用指南
          • 8 高级主题

            • 安全启动与加密
            • OTA远程升级
            • Docker容器部署
            • ROS/ROS2机器人开发
            • RTOS与Linux协同
        • 五、Android 系统

          • 1 快速上手

            • Android系统烧录与启动
            • Android系统基础操作
            • ADB调试与日志分析
          • 2 SDK 编译

            • Android SDK编译
            • Android构建系统与增量编译
          • 3 系统开发

            • Android系统定制
          • 4 应用开发

            • Android应用开发入门
            • Android JNI开发
          • 5 驱动与 HAL

            • Android HAL开发
          • 6 AI 与 NPU

            • Android NPU使用指南
        • 六、硬件参考

          • 核心板参数
          • 底板接口定义
          • 40PIN引脚定义
          • 电源管理
        • 七、资料下载

          • 资料下载
      • Pico-G1

        • 一、产品概述

          • 01 产品介绍
          • 02 SDK版本基本信息
        • 二、快速入门

          • 01 开发环境搭建
          • 02 镜像编译
          • 03 镜像烧录
          • 04 系统登录
          • 05 网络配置
          • 06 文件传输
          • 07 SDK目录结构
          • 08 部署第一个应用程序
          • 09 部署第一个驱动程序
          • 10 SD卡挂载
        • 三、外设与接口

          • 01 GPIO控制
          • 02 UART串口通信
          • 03 I2C 通信
          • 04 SPI 通信
        • 四、MPP媒体开发

          • 01 MPP媒体处理软件
          • 02 图像处理链路
          • 03 视频输入
          • 04 图像编码
        • 五、NPU与AI

          • 01 NPU驱动与运行库架构
          • 02 .xmm 模型加载
          • 03 SVP视频处理
          • 04 AI降噪 (AI_NR)
        • 六、应用程序示例

          • 01 加解密接口应用
          • 02 ADC 采集应用
          • 03 低功耗应用
          • 04 音频处理应用
          • 05 视频编码应用
          • 06 视频输入应用
          • 07 视频图形子系统应用
          • 08 区域叠加应用
          • 09 智能视频引擎应用
          • 10 UVC 网络摄像头应用
          • 11 综合快速演示应用
          • 12 FPN 校正应用
          • 13 区域运动检测应用
          • 14 MTCNN 人脸检测应用
        • 七、扩展板外设功能例程

          • 00 - Pico 扩展板外设功能例程总览
          • 01 - OLED 显示应用
          • 02 - TFT 显示应用
          • 03 - MPU6050 陀螺仪应用
          • 04 - ADC 采集应用
          • 05 - 无源蜂鸣器应用
          • 06 - MQ 气体传感器应用
          • 07 - GPS 定位应用
          • 08 - SHT20 温湿度应用
          • 09 - 超声波测距应用
          • 10 - SPO2 血氧传感器应用
          • 11 - 电机控制应用
          • 12 - 舵机控制应用
    • 开源鸿蒙

      • SC-3568HA

        • 一、简介

          • SC-3568HA简介
        • 二、快速上手

          • OpenHarmony概述
          • 镜像烧录
          • 开发环境准备
          • Hello World应用以及部署
        • 三、应用开发

          • ArkUI

            • 第一章 ArkTS语言简介
            • 第二章 UI组件介绍和实际应用(上)
            • 第三章 UI组件介绍和实际应用(中)
            • 第四章 UI组件介绍和实际应用(下)
          • 拓展

            • 第一章 入门指引
            • 第二章 三方库的引用和使用
            • 第三章 应用编译以及部署
            • 第四章 命令行恢复出厂设置
            • 第五章 系统调试--HDC调试
            • 第六章 APP 稳定性测试
            • 第七章 应用测试
        • 四、设备开发

          • 第一章 环境搭建
          • 第二章 下载源码
          • 第三章 编译源码
        • 五、内核的外设与接口

          • 树莓派接口
          • GPIO 接口
          • I2C 接口
          • SPI通信
          • PWM控制
          • 串口通讯
          • TF Card
          • 屏幕
          • 触摸
          • 音频
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
          • 树莓派拓展板
        • 六、资料下载

          • 资料下载
      • M-K1HSE

        • 一、简介

          • M-K1HSE 简介
        • 二、快速开始

          • 开发环境搭建
          • 源码获取
          • 编译说明
          • 烧录指南
        • 三、应用开发

          • 00 应用开发环境搭建
          • 01 第一个应用-Hello World
        • 四、外设与接口

          • 01 Audio
          • 02 RS485
          • 03 Display
        • 五、系统定制开发

          • 系统移植
          • 系统定制
          • 驱动开发
          • 系统调试
          • OTA升级
        • 六、资料下载

          • 资料下载
    • HVS视觉融合相机

      • 快速开始

        • 01 SDK 介绍
        • 02 资料下载
        • 03 设备固件烧录
        • 04 第一个 C++ 程序
        • 05 第一个 Python 程序
        • 06 Python 数据分析
        • 07 MultiVision Studio
        • 08 版本介绍
      • 二次开发

        • 01 编程指引

          • 01 打开相机
          • 02 读取事件
          • 03 录制与回放
          • 04 事件处理
          • 05 显示与可视化
          • 06 调参
          • 07 采集 APS 图像
          • 08 帧率切换
          • 09 时间戳同步
        • 02 Toolkit SDK

          • 01 Hybrid Vision Toolkit
          • 02 快速上手
          • 03 C++ API
          • 04 Python API
        • 03 Algo SDK

          • 01 Hybrid Vision Algo
          • 02 Algo API
          • 03 Windows Algo SDK
        • 04 USB数据协议
        • 05 示例程序总览
        • 06 应用场景
      • 基础知识

        • 01 事件相机基础原理
        • 02 HVS 融合视觉
        • 03 事件可视化
        • 04 数据格式参考
        • 05 术语表
        • 06 偏置与调参
        • 07 视频教程
      • HVS 相机

        • 01 HVS 相机快速上手
        • 02 网络化能力

          • 01 HVS 相机系统架构
          • 2 EVS Network Server
          • 3 EVS Time Sync
          • 4 Web Window
        • 03 HVS 相机兼容性矩阵
        • 04 常见问题解决指南
        • 05 产品

          • CF-NRS1(灵光一号视觉融合相机)
      • HVS 模块

        • 01 MIPI 模块快速上手
        • 02 载板适配

          • RDK X5 载板适配
          • RDK S100 载板适配
          • 树莓派载板适配
          • shimetapi 板载板适配
        • 03 MIPI 模块兼容性矩阵
        • 04 产品

          • EVS_003 传感器模块
    • AI硬件

      • 1684XB-32T

        • 一、简介

          • AIBOX-1684XB-32简介
        • 二、快速上手

          • 初次使用
          • 网络配置
          • 磁盘使用
          • 内存分配
          • 风扇策略
          • 固件升级
          • 交叉编译
          • 模型量化
        • 三、应用开发

          • 开发简介

            • Sophgo SDK开发
            • SOPHON-DEMO简介
          • 大语言模型

            • 部署Llama3示例
            • Sophon LLM_api_server开发
            • 部署MiniCPM-V-2_6
            • Qwen-2-5-VL图片视频识别DEMO
            • Qwen3-chat-DEMO
            • Qwen3-Qwen Agent-MCP开发
            • Qwen3-langchain-AI Agent
          • 深度学习

            • ResNet(图像分类)
            • LPRNet(车牌识别)
            • SAM(通用图像分割基础模型)
            • YOLOv5(目标检测)
            • OpenPose(人体关键点检测)
            • PP-OCR(光学字符识别)
        • 四、资料下载

          • 资料下载
      • 1684X-416T

        • 简介

          • AIBOX-1684X-416简介
        • Demo简单操作指引

          • shimeta智慧监控demo的简单使用说明
      • RDK-X5

        • 简介

          • RDK-X5 硬件简介
        • 快速开始

          • RDK-X5 快速开始
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-颜色识别检测
            • 实验03-手势识别体验
            • 实验04-YOLOv5物体检测
      • RDK-S100

        • 简介

          • RDK-S100 硬件简介
        • 快速开始

          • RDK-S100 硬件简介
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-图像处理基础
            • 实验03-目标检测
            • 实验04-图像分割
      • AIBOX-M88(RK1828)

        • 一、简介

          • AIBOX-M88(RK1828) - 产品介绍
          • AIBOX-M88(RK1828) 硬件规格
          • AIBOX-M88(RK1828) 使用与安全
        • 二、快速开始

          • AIBOX-M88(RK1828) 镜像烧录
          • RK182X 硬件安装与验证
          • RK182X 开发环境快速搭建
          • RK182X SDK 总览
          • RK182X 环境搭建详解
          • RK182X 快速开始
          • 原厂 SDK 资料抽取记录
        • 三、开发指南

          • ClawChips 架构与原理
          • SKILL 使用手册
          • RK182X系列LLM推理(RK1828型号)
          • RK182X系列CNN推理(RK1828型号)
          • 模型转换
          • RK182X AI Agent 应用开发指南
          • RK182X 工业异常检测应用
        • 四、SDK 参考

          • RKNN3-SDK 概述

            • RKNN3 SDK 概述
          • RKNN3-Toolkit

            • RKNN3 Toolkit 安装与使用
          • RKLLM

            • RKLLM 设备端 LLM 推理
          • RK182X系列 NPU 概述与架构(RK1828型号)
          • RK182X INT8 量化推理部署
          • RK182X MPP 多媒体处理框架
          • MPP 详解

            • RK182X 视频解码
            • RK182X 视频编码
          • NPU 详解

            • RKNN 模型转换
            • RK182X NPU INT8 量化推理
            • RK182X 多模型并行推理
          • RGA 详解

            • RK182X RGA 2D 图形加速
          • VPU 详解

            • RK182X VPU 编解码
        • 五、硬件参考

          • RK182X系列 硬件架构概述(RK1828型号)
          • RK182X 引脚定义与复用配置
          • RK182X 引脚定义
          • RK182X 电源管理
          • RK182X 时钟与 PLL 配置
          • RK182X 时钟与频率配置
        • 六、实战教程

          • Hello World
          • Hello RK1828 - 第一个程序
          • RTSP 推流
          • RTSP 推流 + AI 分析
          • 视美泰AI龙虾一键部署
          • PaddleOCR-VL 文字识别
          • Qwen3-1.7B LLM 文本对话
          • AI 巡检多视角(Qwen3-VL 包装)
          • YOLOv5 目标检测
        • 七、资料下载

          • 资料下载
        • 八、常见问题

          • 常见问题
    • 核心板

      • C-3568BQ

        • 简介

          • C-3568BQ 简介
      • C-3588LQ

        • 简介

          • C-3588LQ 简介
      • GC-3568JBAF

        • 简介

          • GC-3568JBAF 简介
      • C-K1BA

        • 简介

          • C-K1BA 简介
    • 软件平台

      • ShiMetaPi Workbench

        • 一、产品简介

          • 产品概述
          • 核心架构
          • 功能入口
          • 支持的硬件
          • 版本说明
        • 二、快速入门

          • 安装与登录
          • 连接设备
          • 配置环境
          • 接入 AIHub
          • 首次调用模型
        • 三、用户指南

          • 工作区总览
          • 设备管理
          • 模型广场
          • 一键部署
          • 视觉 - SVP
          • 视觉 - 自定义模型
          • shimeta-py IDE
          • 终端
          • Agent 调试助手
          • 设置与资源
        • 四、常见问题

          • 安装与登录
          • 设备连接
          • 模型与部署
          • 视觉与运行时
          • 设置与其他
      • ShimetaPi软件源

        • 简介

          • ShimetaPi 软件源
        • Pico G1 (GK7206)

          • 快速开始

            • 安装与首次推理
            • shimeta_infer — 图片推理
            • shimeta_camera — 摄像头实时推理
            • SVP 场景检测
            • 文件传输与内置模型参考
            • 常见问题
          • HTTP API & Python SDK

            • HTTP API 参考
      • 模型微调训练平台

        • 一、平台介绍

          • 模型训练平台
        • 二、快速上手

          • 注册与登录
          • 创建第一个模型(30 分钟快速体验)
        • 三、训练指南

          • 数据准备与标注
          • 训练参数配置
          • 启动与监控训练
          • 模型评估与测试
        • 四、模型部署

          • 导出模型
          • 部署到边缘设备

Docker 容器部署

目标平台: RK3576 | NPU 算力: 6 TOPS | 文档版本: V1.0
适用板型: C-3576BQ 核心板 + M4-R2 底板
最后更新: 2026-10-23


1. 概述

1.1 功能简介

Docker 是一个开源的应用容器引擎,允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。在 RK3576 平台上,Docker 支持 ARM64(aarch64)架构,可以运行官方 ARM64 镜像(如 python、nginx、redis 等),并支持容器运行时 containerd 和 runc。

RK3576 运行 Linux 6.1 内核,Docker 依赖内核提供的 cgroups、namespace、netfilter、overlayfs 等功能。通过正确的内核配置和 Docker 安装,可以在 RK3576 上实现完整的容器化部署,包括 NPU 推理容器、摄像头处理容器、GPIO 控制容器等硬件透传场景。

核心特性:

特性说明
容器引擎Docker CE 24.x+,支持 ARM64 架构
容器运行时containerd 1.7+ / runc / crun
存储驱动overlay2
网络模式bridge、host、macvlan、overlay、none
硬件透传--device /dev/*、--privileged 特权模式
NPU 支持容器内挂载 /dev/rknpu0、/usr/lib/librknnrt.so
摄像头支持容器内挂载 /dev/video*、/dev/media*
GPIO 支持容器内挂载 /sys/class/gpio
多架构构建Docker Buildx 支持 multi-arch 镜像
多容器编排Docker Compose 支持

1.2 应用场景

  • AI 推理服务:在容器内运行 RKNN 模型推理,配合 NPU 硬件加速实现边缘 AI 部署
  • 摄像头监控:容器化部署视频采集与分析应用,支持多路摄像头接入
  • 微服务架构:将 Web 服务、数据库、消息队列等组件容器化部署
  • 开发环境隔离:使用 Docker 容器隔离开发环境,避免依赖冲突
  • CI/CD 流水线:在容器中构建、测试 RK3576 SDK 固件
  • 工业控制:容器化部署 GPIO 控制、传感器数据采集应用
  • 边缘计算网关:多容器协同运行,实现协议转换、数据预处理、云端上报

1.3 工作原理

RK3576 Docker 容器架构:

┌─────────────────────────────────────────────────────┐
│                  容器应用层                           │
│   NPU 推理容器 · 摄像头容器 · Web 服务容器            │
├─────────────────────────────────────────────────────┤
│                  Docker 引擎层                       │
│   Docker CLI · Docker Daemon · containerd · runc     │
├─────────────────────────────────────────────────────┤
│                  容器运行时层                         │
│   namespace 隔离 · cgroups 资源限制 · overlay2 存储   │
├─────────────────────────────────────────────────────┤
│                  Linux 内核层(6.1)                  │
│   cgroups v1/v2 · netfilter · iptables · bridge      │
├─────────────────────────────────────────────────────┤
│                  硬件层(RK3576)                     │
│   NPU · Camera · GPIO · Mali-G52 MC3 · 网络 · 存储   │
└─────────────────────────────────────────────────────┘

容器运行时组件关系:

Docker CLI ──> Docker Daemon (dockerd)
                    │
                    ├──> containerd ──> runc ──> 容器进程
                    │         │
                    │         └──> shim (containerd-shim-runc-v2)
                    │
                    └──> BuildKit(镜像构建引擎)
阶段组件功能
镜像构建BuildKit / Dockerfile定义容器运行环境,安装依赖,配置应用
镜像拉取docker pull从 Docker Hub 或私有仓库拉取 ARM64 镜像
容器创建docker run创建容器实例,配置网络、存储卷、设备映射
容器运行containerd/runc执行容器进程,隔离命名空间,限制资源
硬件访问--device/--privileged将宿主机设备透传到容器内部
数据持久化volume / bind mount将宿主机目录映射到容器,实现数据持久化

2. 硬件准备

2.1 硬件清单

序号物料名称型号/规格数量用途
1核心板 + 底板C-3576BQ 核心板 + ShimetaPi M4-R2 底板1主开发板
2调试串口USB to TTL 3.3V 转换器1串口调试,波特率 1500000
3M.2 SSD(可选)M.2 接口 NVMe 固态硬盘1Docker 镜像和数据存储
4电源适配器5V/2A(Type-C 或 6pin,空载最小 1000mA)1主板供电
5摄像头模块(可选)MIPI CSI 摄像头1容器内摄像头透传实验
6网线标准 RJ451网络和 SSH 连接

2.2 硬件确认

接入调试串口后,启动开发板,通过串口终端确认硬件信息:

# 确认系统架构
uname -m
# 输出:aarch64

# 确认内核版本
uname -r
# 输出:6.1.x-rockchip

# 确认 CPU 信息
cat /proc/cpuinfo | grep "model name"
# 输出:ARMv8 Processor rev 1 (v8l)

# 确认内存大小
free -h

# 确认存储空间
df -h /

3. 软件准备

3.1 内核配置

Docker 运行需要内核开启 cgroups、namespace、netfilter、overlayfs 等功能的支持。RK3576 Linux 6.1 SDK 提供了通用的 Docker 内核配置(具体配置命令与内核裁剪配置以实际发布的 RK3576 SDK 为准)。

# 在 SDK 编译目录中,应用 Docker 内核配置
cd <以实际发布的 RK3576 SDK 为准>
make ARCH=arm64 rockchip_linux_defconfig rockchip_linux_docker.config

# 编译内核(编译目标以实际 SDK 为准)
make ARCH=arm64 <实际内核编译目标> -j$(nproc)

Rockchip 提供的 Docker 内核配置已包含以下必要功能:

内核模块配置项说明
cgroupsCONFIG_CGROUPS=y资源限制和隔离
namespacesCONFIG_NAMESPACES=y容器命名空间隔离
overlayfsCONFIG_OVERLAY_FS=y容器文件系统
netfilterCONFIG_NETFILTER=y网络过滤
bridgeCONFIG_BRIDGE=yDocker 网络桥接
vethCONFIG_VETH=y虚拟以太网设备
macvlanCONFIG_MACVLAN=yMAC 地址虚拟化
seccompCONFIG_SECCOMP=y系统调用过滤(安全)

使用 Docker 官方检查脚本验证内核配置:

wget https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh
bash check-config.sh

3.2 cgroup 配置

RK3576 Linux 6.1 系统默认使用 cgroups v1。确认 cgroup 已挂载:

# 检查 cgroup 挂载情况
mount | grep cgroup

# 确认 cgroup 子系统
ls /sys/fs/cgroup/
# 预期输出:blkio  cpu  cpuacct  cpu,cpuacct  cpuset  devices  freezer  memory  net_cls  net_prio  pids  systemd

如果 cgroup 未正确挂载,可在内核启动参数中添加:

cgroup_enable=memory cgroup_enable=cpuset

3.3 Docker CE 安装(Ubuntu 22.04)

RK3576 Ubuntu 22.04 系统推荐使用 Docker 官方仓库安装:

# 更新软件包索引
sudo apt-get update

# 安装依赖
sudo apt-get install -y ca-certificates curl gnupg

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加 Docker 官方仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker CE
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动并设置开机自启
sudo systemctl enable --now docker

# 验证安装
sudo docker --version
# 输出:Docker version 24.x.x, build xxxxxxx

sudo docker run --rm hello-world

3.4 containerd 安装与配置

containerd 是 Docker 默认的容器运行时,也可独立使用:

# 安装 containerd
sudo apt-get install -y containerd

# 生成默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 启用 SystemdCgroup(推荐)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 配置国内镜像加速
sudo sed -i 's|sandbox_image = "registry.k8s.io/pause:.*|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml

# 重启 containerd
sudo systemctl restart containerd
sudo systemctl enable containerd

runc 与 crun 对比:

特性runccrun
默认容器运行时是(Docker/K8s 默认)否,可手动切换
编程语言GoC
启动速度较快更快(约快 50%)
内存占用较高较低
cgroup v2 支持支持原生支持
适用场景通用场景资源受限的嵌入式设备

在 RK3576 上如追求更轻量的运行时,可安装 crun 并配置 Docker 使用:

sudo apt-get install -y crun
# 编辑 /etc/docker/daemon.json 添加:
# "default-runtime": "crun",
# "runtimes": {"crun": {"path": "/usr/bin/crun"}}
sudo systemctl restart docker

3.5 Docker 镜像加速

配置 Docker 使用国内镜像加速:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn/",
    "https://mirror.ccs.tencentyun.com/"
  ],
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

4. 操作步骤

4.1 Docker 基础操作

镜像操作:

# 拉取 ARM64 镜像
docker pull python:3.10-slim
docker pull nginx:latest
docker pull redis:7-alpine

# 查看本地镜像
docker image ls

# 删除镜像
docker rmi <imageID>

容器操作:

# 运行交互式容器
docker run -it --rm python:3.10-slim /bin/bash

# 运行后台容器
docker run -d --name my-nginx -p 8080:80 nginx:latest

# 查看运行中的容器
docker container ls

# 查看所有容器(包括已停止的)
docker container ls -a

# 停止/启动容器
docker stop <containerID>
docker start <containerID>

# 进入运行中的容器
docker exec -it <containerID> /bin/bash

# 查看容器日志
docker logs -f <containerID>

# 删除容器
docker rm <containerID>

4.2 Volume 卷管理

Docker 提供三种数据挂载方式:volume(命名卷)、bind mount(绑定挂载)和 tmpfs。

# 创建命名卷
docker volume create my-data

# 查看卷列表
docker volume ls

# 使用命名卷运行容器
docker run -d --name my-redis -v my-data:/data redis:7-alpine

# 绑定挂载宿主机目录
docker run -d -v /home/user/app:/app -v /home/user/models:/models \
  python:3.10-slim python3 /app/main.py

# tmpfs 挂载(内存存储,重启丢失)
docker run -d --tmpfs /tmp:rw,size=100m ubuntu:22.04

# 查看卷详情
docker volume inspect my-data

# 删除未使用的卷
docker volume prune

RK3576 推荐挂载策略:

数据类型挂载方式示例路径说明
NPU 模型文件bind mount-v /home/user/models:/models模型文件持久保存
推理数据named volume-v inference-data:/data数据库等结构化数据
日志文件bind mount-v /var/log/app:/app/logs宿主机统一收集
临时缓存tmpfs--tmpfs /tmp:size=200m高速临时存储

4.3 Docker 网络管理

Docker 提供多种网络驱动,适用于 RK3576 不同场景:

# 查看网络列表
docker network ls

# 创建自定义桥接网络
docker network create --driver bridge \
  --subnet=172.20.0.0/16 \
  --gateway=172.20.0.1 \
  rk3576-net

# 创建 macvlan 网络(容器直接获取物理网络 IP)
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  macvlan-net

# 创建 overlay 网络(跨主机通信,用于多板集群)
docker network create -d overlay --attachable overlay-net

# 将容器连接到自定义网络
docker run -d --name nginx --network rk3576-net -p 80:80 nginx:latest

# 查看容器网络详情
docker inspect --format='{{json .NetworkSettings.Networks}}' nginx

# 容器间通过服务名通信
docker exec -it nginx curl http://app-server:8080

网络模式对比:

网络模式隔离性性能适用场景
bridge高中等默认推荐,多容器隔离
host无最高高性能网络应用
macvlan高高容器需要独立 MAC 地址
none最高N/A完全隔离的计算容器
overlay高中等跨主机容器通信

4.4 Docker Buildx 多架构构建

Docker Buildx 支持在 RK3576 上构建多架构镜像,也可交叉编译 amd64 镜像:

# 安装 buildx 插件(已在 3.3 节安装)
docker buildx version

# 创建多架构构建器
docker buildx create --name multiarch --driver docker-container --use

# 查看构建器
docker buildx inspect --bootstrap

# 构建 ARM64 镜像(默认)
docker buildx build -t my-app:arm64 --platform linux/arm64 .

# 同时构建 ARM64 + AMD64 镜像
docker buildx build -t my-app:latest \
  --platform linux/arm64,linux/amd64 \
  --push .

# 构建并加载到本地(仅支持当前架构)
docker buildx build -t my-app:latest --load .

多架构 Dockerfile 示例:

FROM --platform=$BUILDPLATFORM ubuntu:22.04

ARG TARGETARCH
ARG BUILDARCH

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3 python3-pip \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python3", "main.py"]

4.5 NPU 推理容器部署

在容器内使用 RK3576 NPU 进行 AI 推理,需要将 NPU 设备和运行时库透传到容器中(RK3576 集成单核 NPU,对应设备节点为 /dev/rknpu0,具体节点以实际 SDK 为准):

# 查看 NPU 设备
ls /dev/rknpu*
# 输出:/dev/rknpu0

# 以特权模式运行 NPU 容器
docker run -it --privileged \
  --device /dev/rknpu0:/dev/rknpu0 \
  -v /usr/lib/librknnrt.so:/usr/lib/librknnrt.so \
  -v /path/to/models:/models \
  python:3.10-slim /bin/bash

NPU 推理 Dockerfile:

FROM python:3.10-slim

RUN apt-get update && apt-get install -y \
    libgomp1 \
    && rm -rf /var/lib/apt/lists/*

RUN pip3 install rknn-lite numpy

COPY app.py /app/app.py
COPY models/ /app/models/

WORKDIR /app
CMD ["python3", "app.py"]

NPU 推理应用示例(app.py):

#!/usr/bin/env python3
"""RK3576 NPU 容器内推理示例"""

import numpy as np
from rknnlite.api import RKNNLite

def main():
    rknn = RKNNLite()
    ret = rknn.load_rknn('./models/model.rknn')
    if ret != 0:
        print('加载模型失败')
        return

    ret = rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0)
    if ret != 0:
        print('初始化运行时失败')
        return

    input_data = np.random.randint(0, 255, (1, 224, 224, 3), dtype=np.uint8)
    outputs = rknn.inference(inputs=[input_data])
    print(f"推理输出形状: {outputs[0].shape}")
    rknn.release()

if __name__ == '__main__':
    main()

4.6 资源限制配置

通过 cgroups 对容器进行 CPU 和内存限制:

# 限制容器 CPU 和内存
docker run -d \
  --name limited-app \
  --cpus="2" \
  --memory="1g" \
  --memory-swap="1g" \
  --cpuset-cpus="0-1" \
  python:3.10-slim

# 限制 I/O 带宽
docker run -d \
  --device-read-bps /dev/sda:10mb \
  --device-write-bps /dev/sda:10mb \
  ubuntu:22.04

# 动态调整已运行容器的资源
docker update --cpus="4" --memory="2g" <containerID>

# 查看容器资源使用
docker stats <containerID>

RK3576 资源分配建议:

容器类型CPU 限制内存限制说明
NPU 推理2 核1GBNPU 硬件加速,CPU 占用较低
摄像头采集2 核512MB视频解码主要由 VPU 处理
Web 服务1 核256MB根据并发量调整
数据库2 核1GB根据数据量调整

4.7 Docker Compose 多容器编排

# 安装 Docker Compose 插件(3.3 节已安装)
docker compose version

多容器编排示例(docker-compose.yml):

services:
  web:
    image: nginx:latest
    ports:
      - '80:80'
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - app
    restart: unless-stopped
    networks:
      - rk3576-net

  app:
    build: ./app
    ports:
      - '8080:8080'
    volumes:
      - ./app/data:/app/data
    depends_on:
      - redis
      - db
    environment:
      - REDIS_HOST=redis
      - DB_HOST=db
    restart: unless-stopped
    networks:
      - rk3576-net

  redis:
    image: redis:7-alpine
    volumes:
      - redis-data:/data
    restart: unless-stopped
    networks:
      - rk3576-net

  db:
    image: mysql:8.0
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpass
      - MYSQL_DATABASE=myapp
    restart: unless-stopped
    networks:
      - rk3576-net

  npu:
    build: ./npu-service
    privileged: true
    devices:
      - /dev/rknpu0:/dev/rknpu0
    volumes:
      - /usr/lib/librknnrt.so:/usr/lib/librknnrt.so
      - ./models:/app/models
    ports:
      - '9090:9090'
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 1G
    restart: unless-stopped
    networks:
      - rk3576-net

volumes:
  redis-data:
  mysql-data:

networks:
  rk3576-net:
    driver: bridge
# 启动所有服务
docker compose up -d

# 查看服务状态
docker compose ps

# 查看服务日志
docker compose logs -f npu

# 停止所有服务
docker compose down

# 重建并重启指定服务
docker compose up -d --build npu

4.8 Docker 安全加固

# 不以 root 运行容器
docker run -u 1000:1000 python:3.10-slim

# 只读文件系统
docker run --read-only --tmpfs /tmp ubuntu:22.04

# 丢弃 Linux capabilities
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx:latest

# 启用 seccomp 安全配置文件(默认已启用)
docker run --security-opt seccomp=default ubuntu:22.04

# 禁用容器间 inter-container 通信(同网络默认禁止)
docker network create --internal isolated-net

# 定期清理无用资源
docker system prune -a --volumes

安全配置建议:

安全措施配置方式说明
非 root 运行-u UID:GID减小容器逃逸影响面
只读根文件系统--read-only防止容器写入恶意文件
最小 capabilities--cap-drop=ALL仅保留必要权限
资源限制--memory/--cpus防止资源耗尽攻击
镜像签名验证DOCKER_CONTENT_TRUST=1确保镜像来源可信
日志轮转daemon.json log-opts防止日志撑满磁盘

4.9 CI/CD 流水线

在 RK3576 上使用容器化 CI/CD 构建和测试固件:

GitHub Actions Runner 容器部署:

# docker-compose.ci.yml
services:
  github-runner:
    image: myoung34/github-runner:latest
    environment:
      - RUNNER_NAME=rk3576-runner
      - RUNNER_TOKEN=${RUNNER_TOKEN}
      - RUNNER_REPO=https://github.com/your-org/your-repo
      - RUNNER_SCOPE=repo
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/user/builds:/builds
    restart: unless-stopped

RK3576 SDK 构建容器 Dockerfile:

FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    build-essential gcc-aarch64-linux-gnu \
    git python3 python3-pip device-tree-compiler \
    u-boot-tools mtd-utils \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /build
COPY . /build/sdk/

CMD ["bash", "-c", "cd sdk && make ARCH=arm64 <实际内核编译目标> -j$(nproc)"]

4.10 Kubernetes 与轻量级编排

RK3576 可运行轻量级 Kubernetes 或其他编排工具:

K3s 轻量级 Kubernetes:

# 安装 K3s(单节点)
curl -sfL https://get.k3s.io | sh -

# 查看节点状态
kubectl get nodes

# 部署 NPU 推理应用
kubectl apply -f npu-deployment.yml

NPU 推理 Kubernetes Deployment 示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: npu-inference
spec:
  replicas: 1
  selector:
    matchLabels:
      app: npu-inference
  template:
    metadata:
      labels:
        app: npu-inference
    spec:
      containers:
        - name: npu-app
          image: my-registry/npu-inference:latest
          securityContext:
            privileged: true
          volumeMounts:
            - name: rknpu0
              mountPath: /dev/rknpu0
            - name: librknnrt
              mountPath: /usr/lib/librknnrt.so
            - name: models
              mountPath: /app/models
          resources:
            limits:
              cpu: '2'
              memory: '1Gi'
      volumes:
        - name: rknpu0
          hostPath:
            path: /dev/rknpu0
        - name: librknnrt
          hostPath:
            path: /usr/lib/librknnrt.so
        - name: models
          hostPath:
            path: /home/user/models

轻量级编排工具对比:

工具内存占用K8s 兼容适用场景
Docker Compose~30MB否单机多容器编排
K3s~512MB是生产级边缘编排
Podman~15MB否无守护进程的轻量替代

5. 代码详解

5.1 容器运行时架构

用户空间                              内核空间
┌──────────────────┐                ┌──────────────────┐
│ docker CLI       │                │                  │
│ docker build     │──API──>        │  containerd      │
│ docker run       │                │  (容器管理)       │
│ docker push      │                │    │             │
└──────────────────┘                │    ├── shim     │
                                    │    │   (进程监控)  │
                                    │    │     │       │
                                    │    │   runc     │
                                    │    │   (创建容器)  │
                                    │    │     │       │
                                    │  namespaces     │
                                    │  cgroups        │
                                    │  overlay2       │
                                    └──────────────────┘
技术功能RK3576 支持
namespace进程、网络、文件系统隔离PID、NET、MNT、UTS、IPC、USER
cgroupsCPU、内存、I/O 资源限制CPU、内存、blkio、设备访问
overlay2高效联合文件系统内核原生支持

5.2 设备透传机制

RK3576 支持将硬件设备透传到容器内部:

# 方式 1:--device 指定单个设备
docker run --device /dev/rknpu0:/dev/rknpu0

# 方式 2:--privileged 特权模式(所有设备)
docker run --privileged

# 方式 3:--device-cgroup-rule 精细控制
docker run --device-cgroup-rule='c 189:* rwm' --device /dev/bus/usb

RK3576 常用设备映射:

设备容器内路径用途
NPU/dev/rknpu0AI 推理加速
摄像头/dev/video0-N视频采集
媒体总线/dev/media0-NV4L2 媒体设备
GPIO/sys/class/gpio通用 IO 控制
I2C/dev/i2c-0I2C 通信
SPI/dev/spidev0.0SPI 通信
UART/dev/ttyS0串口通信

5.3 overlay2 存储原理

容器层(可写)          ← 容器运行时的文件修改
┌─────────────────┐
│ /app/config.json │  ← 修改的文件
│ /app/cache/      │  ← 新建的目录
├─────────────────┤
│   diff 目录      │  ← 只保存与镜像层的差异
├─────────────────┤
镜像层(只读)          ← 镜像的多个只读层
┌─────────────────┐
│ base layer       │
├─────────────────┤
│ deps layer       │
├─────────────────┤
│ app layer        │
└─────────────────┘

6. 常见问题

序号现象已确认原因处理方法状态
1docker pull 超时网络无法访问 Docker 官方仓库配置国内镜像加速:编辑 /etc/docker/daemon.json,添加 "registry-mirrors",重启 Docker参考说明
2Git 报错 dubious ownership容器内用户没有宿主机代码的所有权执行 git config --global --add safe.directory "*"参考说明
3NPU 设备无法访问未透传 NPU 设备节点使用 --device /dev/rknpu0 参数或 --privileged,并挂载 librknnrt.so待板上验证
4Debian 网络异常默认使用 iptables-nft,Docker 需要 iptables-legacyupdate-alternatives --set iptables /usr/sbin/iptables-legacy待板上验证
5ARM64 镜像无法运行镜像架构不匹配确认镜像为 ARM64:docker inspect <image> | grep Architecture参考说明
6容器内无法访问摄像头未透传视频设备使用 --device 映射 /dev/video* 和 /dev/media*待板上验证
7Compose 服务启动失败依赖服务未就绪或端口冲突检查端口占用 ss -tlnp,使用 depends_on 配置依赖待板上验证

7. 相关文档

文档名称路径说明
NPU 架构与性能概览NPU架构与性能概览NPU 硬件架构和软件栈
RKNN Toolkit2 安装与使用RKNN Toolkit2安装与使用模型转换工具,准备容器内推理模型
Python 应用开发Python应用开发容器内 Python 推理应用基础
摄像头应用摄像头应用摄像头设备透传参考
OTA 远程升级OTA远程升级容器镜像与应用升级
硬件参考-核心板参数核心板参数C-3576BQ 核心板硬件规格

在 GitHub 上编辑此页