cocker C 语言实现的容器引擎

开源网站开源项目 24-05-04 14:10:22

1. 概述1.1. cocker是什么

cocker是我个人用C语言完全自研的容器引擎(对标Docker),主要解决如下工作场景中的痛点:

原生支持多进程架构的容器使用模式,无须引入第三方组件。

按虚拟主机方式管理容器,交互式构建镜像,写过复杂Dockerfile的人都深恶痛绝。

镜像多版本共存管理。

(更多...)

cocker使用到了以下Linux底层技术:LXCcgroupoverlayfsiptablesptms等。

1.2. 系统架构

images/cocker_architecture.png

在LXC中,容器只是内核命名空间隔离的根进程以及子进程树,隔离域有主机名字、进程空间、根文件系统、IPC、网络等。cocker完整的实现了以上所有隔离域,在容器管理设计上倾向于虚拟主机方式,也支持类似Docker的单进程方式。

cocker自带了容器根进程,负责通过伪终端方式桥接容器内外,而不是必须通过ssh

cgroup负责隔离域的系统资源管控,包括CPU、内存等。

1.2.1. 状态迁移图

images/cocker_state_transition_diagram.png

cocker镜像可以本地构建或从镜像库上传下载,镜像库目前只支持ssh服务端,后续版本中会加入cocker原生服务器。

cocker镜像允许不同版本共存,创建容器时可以指定镜像版本,或者默认最新版。镜像可以复制和删除,也可以修改版本号。

cocker容器创建出来后可以启动、关闭和销毁。修改容器属性如虚拟IP、端口映射和卷映射必须在容器关闭状态下进行。

cocker镜像可以转化为cocker容器便于交互式修改,然后再转化回来。

1.2.2. 层叠文件系统

images/cocker_overlayfs.png

层叠文件系统是多镜像容器的存储基础,cocker采用overlayfs作为其层叠文件系统引擎,可以叠加几乎无限的镜像层。

cocker的镜像和容器等都存放在环境变量COCKER_HOME指向的主目录中,所以规划其容量是使用前必须要考虑的问题。如果没有设置环境变量COCKER_HOME,则默认指向/var/cocker

COCKER_HOME主目录中有镜像主目录images、容器主目录containersssh镜像仓库srepo,以及日志文件cocker.log

1.2.3. 网络

images/cocker_network.png

cocker支持三种网络模型:HOST、CUSTOM和BRIDGE。

网络模型 说明

HOST无预置网络环境CUSTOM仅仅预置网络命名空间,不创建容器内外网卡等,由完全由用户自设置BRIDGE预置以NAT方式的容器向宿主机的网络连通方式、自定义多组指定端口映射转发的宿主机向容器的网络连通方式

首次执行cocker会创建网桥设备cocker0,网段为166.88.0.x

1.2.4. 系统资源限制

images/cocker_cgroup.png

cocker目前只实现了CPU核分配、时间片占用百分比分配、内存分配,其它系统资源在后续版本中会逐渐完善。

1.2.5. 伪终端

images/cocker_pty.png

自带容器根进程接受客户端cocker连接后会创建伪终端会话,就像登录到虚拟主机上命令交互一样,无需使用ssh

1.3. 快速使用

使用主控工具cocker快速创建一个小型测试镜像,里面调用了自带脚本cocker_install_test.sh构建根文件系统。

然后使用指令-a boot基于刚刚创建的镜像test启动一个容器test,并且直接打开一个会话连接到容器中的伪终端...退出伪终端后,使用指令-a shutdown关闭容器,最后使用指令-a destroy销毁容器。

#cocker-ainstall_testOK#cocker-simagesimage_idversionmodify_datetimesize--------------------------------------------------------------------test_2018-11-10T09:21:1224MB#cocker-acreate-mtest-ctestOK#cocker-aboot-ctest-tconnecttocontainerok---Welcometocockercontrainer---[root@test/root]exitlogout#cocker-ashutdown-ctestOK#cocker-adestroy-ctestOK

...2. 最后2.1. 关于cocker

欢迎使用cocker,如果你使用中碰到了问题请告诉我,谢谢 ^_^

源码托管地址 : 开源中国、github

2.2. 关于作者

厉华,主手C,写过小到性能卓越方便快捷的日志库、HTTP解析器、日志采集器等,大到交易平台/中间件等,分布式系统实践者,容器技术爱好者,目前在某城商行负责基础架构。

通过邮箱联系我 : 网易、Gmail

[cocker C 语言实现的容器引擎]相关推荐
qqbot QQ 群聊天记录机器人

qqbot QQ 群聊天记录机器人

qqbot = 基于webqq协议的QQ群聊天记录机器人 qqbot 连通 IRC 和 QQ群,并能实时记录聊天信息。每日自动……...

Apollo 消息代理工具

Apollo 消息代理工具

Apollo以ActiveMQ原型为基础,是一个更快、更可靠、更易于维护的消息代理工具。Apache称Apollo为最快、最……...

MaxKey 单点登录认证系统

MaxKey 单点登录认证系统

MaxKey单点登录认证系统,谐音马克思的钥匙寓意是最大钥匙,是业界领先的企业级IAM身份管理和认证产品,支……...

Neo4j 高性能的 NoSQL 图形数据库

Neo4j 高性能的 NoSQL 图形数据库

Neo是一个网络——面向网络的数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java……...

Bingo PHP开发脚手架

一个小巧易用,流程完整,易于拓展,方便维护的PHP开发脚手架。 Bingo目录 components:系统组件目录 Mod……...

今日开源
  1. NLTK 自然语言工具包

    NLTK 会被自然地看作是具有栈结构的一系列层,这些层构建于彼此基础之上。那些熟悉人工语言(比如 Python)的文法和解析的读者来说,理解自然语言模型中类似的 —— 但更深奥的 —— 层不会有太大困难。 尽管 NLTK 附……

    开源软件 2024-05-18

  2. SiMay远程控制管理系统:C#开源远程控制解决方案

    SiMay远程控制管理系统:C#开源远程控制解决方案

    SiMay远程控制管理系统是一款基于Windows的软件,采用IOCP异步通信模型,实现高效远程协助、文件管理、实时语音、摄像头监控、注册表编辑、命令行操作、进程管理、桌面切换等功能。支持捕获UAC和WinLogon桌面,多……

    SiMay 2024-05-18

  3. SWT 本地化GUI组件库

    SWT 本地化GUI组件库

    SWT-"Standard Widget Toolkit",它是一个Java平台下开放源码的Native GUI组件库,也是Eclipse平台的UI组件之一。从功能上来说,SWT与AWT/SWING是基本等价的。SWT以方便有效的方式提供了便携式的 (即Write Once,……

    开源软件 2024-05-18

返回顶部小火箭