当前位置: 首页 > 软件库 > 云计算 > PaaS系统/容器 >

cocker

C 语言实现的容器引擎
授权协议 LGPL
开发语言 C/C++
所属分类 云计算、 PaaS系统/容器
软件类型 开源软件
地区 国产
投 递 者 胡国兴
操作系统 Windows
开源组织
适用人群 未知
 软件概览

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 -a install_test
OK
# cocker -s images
image_id                       version    modify_datetime     size      
--------------------------------------------------------------------
test                           _          2018-11-10T09:21:12 24 MB
# cocker -a create -m test -c test
OK
# cocker -a boot -c test -t   
connect to container ok
--- Welcome to cocker contrainer ---

[root@test /root] exit
logout
# cocker -a shutdown -c test
OK
# cocker -a destroy -c test
OK

...

2. 最后

2.1. 关于cocker

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

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

2.2. 关于作者

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

通过邮箱联系我 : 网易Gmail

  • docker //注意安装libevent时,要选择对应openssl版本的,否则出错 FROM php:7.3.8-fpm COPY . /usr/src/tmp WORKDIR /usr/src/tmp RUN apt-get update \ # 相关依赖必须手动安装 && apt-get install -y \ libfreetype6-dev \ l

  • 1、jsp的5大常用的内置对象及作用 1.request对象     客户端的请求信息被封装在request对象中,     通过它才能了解到客户的需求,然后做出响应。    它是HttpServletRequest类的实例。 2.response对象     response对象包含了响应客户请求的有关信息     但在JSP中很少直接用到它。     它是HttpServletResponse

  • These sneakers are created adhering to your traditional structure and magnificence patterns on the moccasins-covered by using a sole piece of natural leather-based and with standard sewing on prime. N

  • cocker 基于镜像, 秒启动各种容器, 每一种容器都是一个完美运行环境, 容器之间相互隔离 1.设置存储库 $ sudo yum install -y yum-utils $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 2.安装引

 相关资料
  • 我有一个复杂的jsf页面,其中有一些在PrimeFaces中开发的小部件。到目前为止,应用程序是完全ajaxified的,这意味着没有提交,但是所有的事件和更新都是通过Ajax行为来处理的(这不是必须的,而是一个很好的特性)。我还做了一个来切换语言: 在selectonemenu中有一个ajax更新: 这很好用,是首选的解决方案,因为它是Ajax,但是 已编辑 欢迎任何建议。

  • 本文向大家介绍Go语言Telnet回音服务器的实现,包括了Go语言Telnet回音服务器的实现的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Go语言Telnet回音服务器,分享给大家,具体如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C语言实现xml构造解析器,包括了C语言实现xml构造解析器的使用技巧和注意事项,需要的朋友参考一下 纯C实现xml构造解析器,所有实现只有一个.c一个.h文件组成,简单易用,易于扩展。

  • 想问下,为一个脚本语言写一个实现器,应该需要哪些知识或者书本? 我可能需要实现一个脚本语言的运作器,这个脚本语言语法严谨,类似C语言.但它的解释器封装的很严实. 这种场合我需要哪些知识或者书本能帮助我?恳请赐教. 我觉得我的思路是把它先变成一个C语言代码,然后再当作C代码进行使用. /

  • 本文向大家介绍GO语言实现的端口扫描器分享,包括了GO语言实现的端口扫描器分享的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍C语言单链表的实现,包括了C语言单链表的实现的使用技巧和注意事项,需要的朋友参考一下 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表结构: SList.h SList.cpp Test.cpp 以上内容是小编给大家介绍的C语言单链表的实现代码,希望对大家有所帮助!

  • 本文向大家介绍go语言实现sqrt的方法,包括了go语言实现sqrt的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现sqrt的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 语言是一种规范,要想使用它,需要将其实体化,用编译原理的话讲,可以大致分为编译器和解释器,而根据之前说的,如果把目标代码的解释过程看做解析过程,比如x86机器指令load到cpu时,根据不同的指令进行不同的运算,以及字节码的分派等,这个界限是模糊的 因此,这个事情可以这么讲,假设我们已经有一台机器M,它可以接收A语言并完成计算工作,则对于高级语言B来说,我们只要将其转换成A语言即可。根据实际情况,