博客
关于我
docker OCI runtime
阅读量:427 次
发布时间:2019-03-06

本文共 1504 字,大约阅读时间需要 5 分钟。

Open Container Initiative(OCI)标准解析

容器运行机制

Open Container Initiative(OCI)定义了容器运行的标准协议,旨在确保不同环境下的容器实现兼容性。OCI容器通过runc工具运行,其核心规格涉及容器运行态和生命周期管理。

容器状态

容器运行态由state字段定义,具体包含以下信息:

  • ociVersion:容器创建时的OCI版本。
  • id:容器的唯一ID。
  • status:容器的运行状态,可选值包括:
    • creating:容器正在创建中。
    • created:容器已创建但未执行用户程序。
    • running:容器正在执行用户程序。
    • stopped:容器进程已退出。
  • pid:宿主机上看到的容器进程ID。
  • bundle:容器使用的bundle目录路径。
  • rootfs:容器的根文件系统路径。
  • created:容器创建的时间戳。
  • owner:容器的所有者信息。

通过runc state命令可以查看容器的详细状态。例如:

# runc state busybox{  "ociVersion": "1.0.0",  "id": "busybox",  "pid": 41732,  "status": "running",  "bundle": "/home/test",  "rootfs": "/home/test/rootfs",  "created": "2018-12-25T14:41:58.82202891Z",  "owner": ""}

容器生命周期管理

容器从创建到退出遵循明确的生命周期事件:

  • 创建(create)

    • 使用create命令创建容器,指定bundle路径。
    • 检查config.json配置文件中的设置,确保资源可用。
    • 创建完成后,用户程序尚未执行。
  • 启动(start)

    • 执行用户程序,根据config.json配置定义进程环境。
    • 启动前需执行prestart预热钩。
  • 停止(stop)

    • 容器进程退出,状态变为stopped
  • 删除(delete)

    • 使用delete命令移除非停止状态的容器。
    • 删除后可重复使用容器ID。
  • 配置文件解析

    config.json是容器运行的核心配置文件,包含以下内容:

    • platform:指定容器所在平台(如linux, solaris, windows等)。
    • root
      • path:根文件系统路径。
      • readonly:是否为只读文件系统(默认false)。
    • mount:按顺序挂载文件或设备。
      • destination:容器挂载点(绝对路径)。
      • source:挂载来源(设备名称、文件或目录)。
      • option:挂载选项(如bindrbind等)。
    • process
      • terminal:是否为终端仿真(默认false)。
      • cwd:执行命令的工作目录。
      • env:环境变量配置。
      • args:执行命令参数。
    • rlimits:进程资源限制(如CPU、内存等)。

    容器资源管理

    限制资源

    • 内存:可设置内存使用上限、软限制和交换空间。
    • CPU:设置CPU共享、周期限制等。
    • 存储:限制设备访问、挂载类型等。
    • 网络:配置网络优先级、网卡名称等。

    系统调用

    • seccomp:用于沙盒机制,限制系统调用权限。
    • cgroups:用于资源限制和网络控制。

    容器优化建议

    • 设备白名单:允许特定设备访问。
    • 大页大小:优化内存使用。
    • 网络隔离:通过cgroups限制网络访问。

    总结

    OCI标准为容器运行提供了统一规范,确保不同实现间的兼容性。通过合理配置config.json,优化资源使用,管理员可以显著提升容器性能和安全性。

    转载地址:http://lxakz.baihongyu.com/

    你可能感兴趣的文章
    Qt笔记——官方文档全局定义(三)Macros宏
    查看>>
    poj 3628 Bookshelf 2
    查看>>
    Qt笔记——官方文档全局定义(一)Types数据类型
    查看>>
    POJ 3670 DP LIS?
    查看>>
    POJ 3683 Priest John's Busiest Day (算竞进阶习题)
    查看>>
    POJ 3988 Selecting courses
    查看>>
    POJ 4020 NEERC John's inversion 贪心+归并求逆序对
    查看>>
    poj 4044 Score Sequence(暴力)
    查看>>
    POJ 基础数据结构
    查看>>
    POJ 题目3020 Antenna Placement(二分图)
    查看>>
    Poj(1797) Dijkstra对松弛条件的变形
    查看>>
    SpringBoot为什么不需要xml配置文件?
    查看>>
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    查看>>
    Qt笔记——SQLite初探QSqlDatabase QSqlQuery
    查看>>
    POJ-1163-The Triangle
    查看>>
    POJ-Fence Repair 哈夫曼树
    查看>>
    poj1061 - 同余方程,二元一次不定方程
    查看>>
    Qt笔记——SQLite再探
    查看>>
    poj1068Parencodings
    查看>>
    poj1182(带权并查集)
    查看>>