容器配置

更新时间:
2023-09-01
下载文档

容器配置

本节主要介绍 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"],
    "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 的数量。

容器磁盘配置

容器磁盘配置示例和参数说明如下:

配置示例

 "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 服务
文档内容是否对您有所帮助?
有帮助
没帮助