容器配置
本节主要介绍 ECS 的容器配置。
ECS 容器的配置文件符合 OCI 运行时标准,其范例如下:
{
"ociVersion": "1.0.0",
"platform": {
"os": "sylixos",
"arch": "arm"
},
"process": {
"args": ["/apps/ecs_demo"],
"env": ["PATH=/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin",
"TERM=vt100"],
"cwd": "/"
},
"root": {
"path": "/rootfs",
"readonly": false
},
"hostname": "sylixos_ecs",
"mounts": [
{
"destination": "/qt",
"source": "/qt",
"options": ["rx"]
}
],
"sylixos": {
"devices": [
{
"path": "/dev/fb0",
"access": "rw"
},
{
"path": "/dev/input/xmse",
"access": "rw"
},
{
"path": "/dev/input/xkbd",
"access": "rw"
}
],
"resources": {
"cpu": {
"highestPrio": 160,
"lowestPrio": 250,
"defaultPrio": 200
},
"affinity" :[],
"memory": {
"kheapLimit": 2097152,
"memoryLimitMB": 512
},
"kernelObject": {
"threadLimit": 300,
"threadPoolLimit": 1,
"eventLimit": 800,
"eventSetLimit": 50,
"partitionLimit": 5,
"regionLimit": 5,
"msgQueueLimit": 50,
"timerLimit": 5,
"rmsLimit": 5,
"threadVarLimit": 2,
"posixMqueueLimit": 300,
"dlopenLibraryLimit": 50,
"xsiipcLimit": 100,
"socketLimit": 50,
"srtpLimit": 10,
"deviceLimit": 60
},
"disk": {
"limitMB": 2048
}
},
"commands": [
"exec", "top", "cpuus", "vi", "cat", "touch", "ps", "ts", "tp", "ss",
"ints", "ls", "cd", "pwd", "modules", "varload", "varsave", "shstack",
"srtp", "shfile", "help", "debug", "shell", "ll", "sync", "ln", "kill",
"free", "env", "mems"
],
"network": {
"telnetdEnable": true,
"ftpdEnable": true,
"sshdEnable": true
}
}
}
容器平台支持
容器平台支持的配置示例和参数说明如下:
配置示例
"platform": {
"os": "sylixos",
"arch": "arm"
},
参数说明
参数 | 说明 |
---|---|
os | 容器支持的操作系统,仅支持 SylixOS |
arch | 容器支持的系统架构,目前 arch 支持的架构类型和对应平台如下: arm:ARM32 arm64:ARM64 csky:C-SKY mips32:MIPS32 mips64:MIPS64 riscv32:RISC-V32 riscv64:RISC-V64 ppc:PowerPC sparc:SPARC x86-64:x86-64 x86:x86 loongarch64:LoongArch64 |
容器进程支持
容器进程支持的配置示例和参数说明如下:
配置示例
"process": {
"args": ["/apps/ecs_demo", "arg0", "arg1"],
"env": ["PATH=/usr/bin:/bin:/usr/pkg/sbin:/sbin:/usr/local/bin"],
"cwd": "/"
},
参数说明
参数 | 说明 |
---|---|
args | 容器支持的默认启动参数配置,其格式如 spawnl 函数的参数列表 |
env | 容器启动时需要设置的环境变量 |
cwd | 容器启动时需要设置的当前工作目录 |
容器的根目录
容器根目录的配置示例和参数说明如下:
配置示例
"root": {
"path": "/rootfs",
"readonly": false
},
参数说明
参数 | 说明 |
---|---|
path | 容器根目录,即 Bundle 目录内的根目录名称 |
readonly | 设置容器根目录是否支持只读。ture 表示支持;false 表示不支持 |
容器主机名称
容器主机名称的配置示例和参数说明如下:
配置示例
"hostname": "sylixos_ecs",
参数说明
参数 | 说明 |
---|---|
hostname | 容器主机名称 |
容器挂载配置
用户可以将容器内的路径挂载到宿主环境的某个真实路径下。比如,由于 Qt 共享库较大,复用系统的 Qt 共享库可以避免容器与系统存放多套 Qt 共享库,有助于减小容器镜像的体积。容器挂载配置示例和参数说明如下:
配置示例
"mounts": [
{
"source": "/qt",
"destination": "/qt",
"options": ["rx"]
}
],
参数说明
参数 | 说明 |
---|---|
source | 容器的虚拟路径 |
destination | 宿主系统的真实物理路径 |
options | 挂载时的权限,支持的选项如下: ro:只读挂载,当 options 为空时,默认为 ro rw:读写挂载 rx:读、可执行挂载 |
注意:
当宿主环境的真实路径不存在时,容器内的路径会显示为无权限访问状态。
容器设备权限配置
容器可以访问真实的硬件设备,但让容器访问所有设备将有安全风险。此时可通过设备权限配置来限制容器访问设备的权限。容器设备权限配置示例和说明如下:
配置示例
"devices": [
{ "path": "/dev/fb0", "access": "rw" },
{ "path": "/dev/input/xmse", "access": "rw"},
{ "path": "/dev/input/xkbd", "access": "rw"}
],
参数说明
参数 | 说明 |
---|---|
path | 宿主系统的设备路径 |
access | 读、写、执行权限,配置项说明如下: ro:只读挂载,当 options 为空时,默认为 ro rw:读写挂载 rx:读、可执行挂载 |
说明:
容器设备的权限配置遵循“最后有效”原则,如果多条规则覆盖到同一设备,则以最后一条规则为有效规则。
容器内线程优先级
容器内线程优先级配置示例和说明如下:
配置示例
"cpu": {
"highestPrio": 160,
"lowestPrio": 250,
"defaultPrio": 200
},
参数说明
参数 | 说明 |
---|---|
highestPrio | 容器内允许的线程最高优先级。当容器内期望创建的线程优先级高于 highestPrio 时,实际创建的线程优先级会被设定为 highestPrio |
lowestPrio | 容器内允许的线程最低优先级。当容器内期望创建的线程优先级低于 lowestPrio 时,实际创建的线程优先级会被设定为 lowestPrio |
defaultPrio | 容器优先级,即容器内线程的默认优先级 |
容器内线程绑核
容器内线程支持绑核运行,配置示例如下:
配置示例
"affinity": [0, 1],
容器内存配置
容器内存配置示例和说明如下:
配置示例
"memory": {
"kheapLimit": 2097152,
"memoryLimitMB": 512
},
参数说明
参数 | 说明 |
---|---|
kheapLimit | 容器内允许使用的最大内核堆大小,单位为 Byte |
memoryLimitMB | 容器内允许使用的最大内存,单位为 MB |
容器内核对象配置
容器内核对象配置示例和说明如下:
配置示例
"kernelObject": {
"threadLimit": 300,
"threadPoolLimit": 1,
"eventLimit": 800,
"eventSetLimit": 50,
"partitionLimit": 5,
"regionLimit": 5,
"msgQueueLimit": 50,
"timerLimit": 5,
"rmsLimit": 5,
"threadVarLimit": 2,
"posixMqueueLimit": 300,
"dlopenLibraryLimit": 50,
"xsiipcLimit": 100,
"socketLimit": 50,
"srtpLimit": 10,
"deviceLimit": 60
},
参数说明
参数 | 说明 |
---|---|
threadLimit | 容器内允许的最大线程数 |
threadPoolLimit | 容器内允许的最大线程池数 |
eventLimit | 容器内允许的最大事件数 |
eventSetLimit | 容器内允许的最大事件集数 |
partitionLimit | 容器内允许的最大定长分区数 |
regionLimit | 容器内允许的最大变长分区数量 |
msgQueueLimit | 容器内允许的最大消息队列数量 |
timerLimit | 容器内允许的最大内核定时器数量 |
rmsLimit | 容器内允许的最大 RMS 调度器数量 |
threadVarLimit | 容器内允许的最大线程私有变量数 |
posixMqueueLimit | 容器内允许的最大 posix 消息队列数 |
dlopenLibraryLimit | 容器内允许的最大 dlopen 共享库数量 |
xsiipcLimit | 容器内允许的最大 xsiipc 数量 |
socketLimit | 容器内允许的最大 socket 数量 |
srtpLimit | 容器内允许的最大 srtp 进程数量 |
deviceLimit | 容器内允许的最大全局设备数量,如串口、FIFO 等 |
说明:
- 以上内核对象配置项若在配置文件中未指定,则系统会使用其默认配置。
- 每创建一个 socket 就会占用一个 msgqueue,建议在扩大 socket 数量的同时扩大 msgqueue 的数量。
- timerLimit 配置只限制内核定时器数量,POSIX 定时器不受此配置影响。
容器磁盘配置
容器磁盘配置示例和参数说明如下:
配置示例
"disk": {
"limitMB": 2048
}
参数说明
参数 | 说明 |
---|---|
limitMB | 容器允许使用的最大磁盘空间,单位为 MB |
容器命令权限配置
容器命令权限配置用于配置容器内可以使用的系统命令。需要注意的是,某些命令在宿主环境和容器环境中的执行效果存在差异。容器命令权限配置示例如下:
"commands": [
"exec", "top", "cpuus", "vi", "cat", "touch", "ps", "ts", "tp", "ss", "ints",
"ls", "cd", "pwd", "modules", "varload", "varsave", "shstack", "srtp",
"shfile", "help", "debug", "shell", "ll", "sync", "ln", "kill", "free",
"env", "mems"
],
注意:
即使在配置文件中配置了 insmod, rmmod, modulereg, setpci, lspci 命令,这些命令也无法在容器内执行。
容器网络配置
容器网络配置示例和说明如下:
配置示例
"network": {
"telnetdEnable": true,
"ftpdEnable": true,
"sshdEnable": true
}
说明:
RealEvo-IDE 在 6.1.0 版本引入 sshd 服务,network 中的 sshdEnable 的使能选项,使用时请确认版本支持。
参数说明
参数 | 说明 |
---|---|
telnetdEnable | 设置是否开启容器内的 TELNETD 服务 |
ftpdEnable | 设置是否开启容器内的 FTPD 服务 |
sshdEnable | 设置是否开启容器内的 SSHD 服务 |