• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

cocker: cocker是我个人用C语言完全自研的容器引擎(对标Docker、阿里Pouch) ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

cocker

开源软件地址:

https://gitee.com/calvinwilliams/cocker

开源软件介绍:

容器引擎(cocker)

1. 概述

1.1. cocker是什么

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

  • 原生支持多进程架构的容器使用模式,无须引入第三方组件。
  • 按虚拟主机方式管理容器,交互式构建镜像,写过复杂Dockerfile的人都深恶痛绝。
  • 镜像多版本共存管理。
  • (更多...)

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

1.2. 兼容性

笔者环境是Red Hat Enterprise Linux Server release 7.4,理论上7版本、以及对应CentOS都是可用的。有朋友反映在Ubuntu上不能使用,经笔者初步试验是由于环境差异造成问题,所以非RedHat/CentOS环境等待以后解决其兼容性。

1.3. 系统架构

images/cocker_architecture.png

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

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

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

1.3.1. 状态迁移图

images/cocker_state_transition_diagram.png

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

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

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

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

1.3.2. 层叠文件系统

images/cocker_overlayfs.png

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

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

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

1.3.3. 网络

images/cocker_network.png

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

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

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

1.3.4. 系统资源限制

images/cocker_cgroup.png

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

1.3.5. 伪终端

images/cocker_pty.png

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

1.4. 快速使用

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

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

# cocker -a install_testOK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           _          2018-11-10T09:21:12 24 MB# cocker -a create -m test -c testOK# cocker -a boot -c test -t   connect to container ok--- Welcome to cocker contrainer ---[root@test /root] exitlogout# cocker -a shutdown -c testOK# cocker -a destroy -c testOK

2. 安装

2.1. Linux源码编译

2.1.1. 确认依赖包已安装

yum install -y telnetyum install -y nmap-ncatyum install -y bridge-utilsyum install -y man-pagesyum install -y supermin5yum install -y openssl-devel

2.1.2. 确认内核转发功能已开启

临时开启

# echo "1" >/proc/sys/net/ipv4/ip_forward

或永久开启

# echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf# sysctl -p

2.1.3. 准备cocker源码

下载cocker源码包,解开,进入

# tar xvzf cocker-X.X.X.tar.gz# cd cocker-X.X.X

或克隆cocker源码库,进入

# git clone https://gitee.com/calvinwilliams/cocker# cd cocker

or

# git clone https://github.com/calvinwilliams/cocker# cd cocker

2.1.4. 编译安装

注意:如果你在非root用户编译源码,确认sudo无需输入密码。

清理中间文件

# make -f makefile.Linux cleanmake[1]: 进入目录“/home/calvin/src/cocker/shbin”make[1]: 离开目录“/home/calvin/src/cocker/shbin”make[1]: 进入目录“/home/calvin/src/cocker/src”make[2]: 进入目录“/home/calvin/src/cocker/src/util”rm -f list.orm -f LOGC.orm -f version.orm -f file.orm -f string.orm -f socket.orm -f pts.orm -f libcocker_util.somake[2]: 离开目录“/home/calvin/src/cocker/src/util”make[2]: 进入目录“/home/calvin/src/cocker/src/cocker”rm -f util.orm -f main.orm -f env.orm -f show_images.orm -f show_containers.orm -f action_create.orm -f action_destroy.orm -f action_boot.orm -f action_shutdown.orm -f action_version.orm -f action_vip.orm -f action_port_mapping.orm -f action_volume.orm -f action_attach.orm -f action_install_test.orm -f action_to_container.orm -f action_to_image.orm -f action_copy_image.orm -f action_del_image.orm -f action_export.orm -f action_import.orm -f show_ssearch.orm -f action_spush.orm -f action_spull.orm -f cockermake[2]: 离开目录“/home/calvin/src/cocker/src/cocker”make[2]: 进入目录“/home/calvin/src/cocker/src/cockerinit”rm -f main.orm -f server.orm -f pty.orm -f pts_and_tcp_bridge.orm -f cockerinitmake[2]: 离开目录“/home/calvin/src/cocker/src/cockerinit”make[1]: 离开目录“/home/calvin/src/cocker/src”

编译并安装到系统目录里

注意:如果你在非root用户编译源码,前面加上sudo -E

# make -f makefile.Linux installmake[1]: 进入目录“/home/calvin/src/cocker/src”make[2]: 进入目录“/home/calvin/src/cocker/src/util”rm -f list.orm -f LOGC.orm -f version.orm -f file.orm -f string.orm -f socket.orm -f pts.orm -f libcocker_util.somake[2]: 离开目录“/home/calvin/src/cocker/src/util”make[2]: 进入目录“/home/calvin/src/cocker/src/cocker”rm -f util.orm -f main.orm -f env.orm -f show_images.orm -f show_containers.orm -f action_create.orm -f action_destroy.orm -f action_boot.orm -f action_shutdown.orm -f action_version.orm -f action_vip.orm -f action_port_mapping.orm -f action_volume.orm -f action_attach.orm -f action_install_test.orm -f action_to_container.orm -f action_to_image.orm -f action_copy_image.orm -f action_del_image.orm -f action_export.orm -f action_import.orm -f show_ssearch.orm -f action_spush.orm -f action_spull.orm -f cockermake[2]: 离开目录“/home/calvin/src/cocker/src/cocker”make[2]: 进入目录“/home/calvin/src/cocker/src/cockerinit”rm -f main.orm -f server.orm -f pty.orm -f pts_and_tcp_bridge.orm -f cockerinitmake[2]: 离开目录“/home/calvin/src/cocker/src/cockerinit”make[1]: 离开目录“/home/calvin/src/cocker/src”make[1]: 进入目录“/home/calvin/src/cocker/shbin”make[1]: 离开目录“/home/calvin/src/cocker/shbin”make[1]: 进入目录“/home/calvin/src/cocker/src”make[2]: 进入目录“/home/calvin/src/cocker/src/util”gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c list.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c LOGC.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c version.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c file.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c string.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c socket.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99  -c pts.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o libcocker_util.so list.o LOGC.o version.o file.o string.o socket.o pts.o -shared -L. -L/lib64 -L/usr/lib64 -L/usr/lib rm -f /lib64/libcocker_util.socp -rf libcocker_util.so /lib64/rm -f /usr/include/cocker_in/list.hcp -rf list.h /usr/include/cocker_in/rm -f /usr/include/cocker_in/LOGC.hcp -rf LOGC.h /usr/include/cocker_in/rm -f /usr/include/cocker_in/cocker_util.hcp -rf cocker_util.h /usr/include/cocker_in/make[2]: 离开目录“/home/calvin/src/cocker/src/util”make[2]: 进入目录“/home/calvin/src/cocker/src/cocker”gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c util.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c main.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c env.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c show_images.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c show_containers.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_create.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_destroy.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_boot.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_shutdown.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_version.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_vip.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_port_mapping.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_volume.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_attach.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_install_test.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_to_container.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_to_image.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_copy_image.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_del_image.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_export.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_import.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c show_ssearch.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_spush.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c action_spull.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o cocker util.o main.o env.o show_images.o show_containers.o action_create.o action_destroy.o action_boot.o action_shutdown.o action_version.o action_vip.o action_port_mapping.o action_volume.o action_attach.o action_install_test.o action_to_container.o action_to_image.o action_copy_image.o action_del_image.o action_export.o action_import.o show_ssearch.o action_spush.o action_spull.o -L. -L/lib64 -L/usr/lib64 -L/usr/lib -L/lib64 -lcocker_util -lcrypto rm -f /bin/cockercp -rf cocker /bin/make[2]: 离开目录“/home/calvin/src/cocker/src/cocker”make[2]: 进入目录“/home/calvin/src/cocker/src/cockerinit”gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c main.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c server.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c pty.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/usr/include -I/usr/include -std=gnu99 -I/usr/include/cocker_in  -c pts_and_tcp_bridge.cgcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -o cockerinit main.o server.o pty.o pts_and_tcp_bridge.o -L. -L/lib64 -L/usr/lib64 -L/usr/lib -L/lib64 -lcocker_util -lcrypto rm -f /bin/cockerinitcp -rf cockerinit /bin/make[2]: 离开目录“/home/calvin/src/cocker/src/cockerinit”make[1]: 离开目录“/home/calvin/src/cocker/src”make[1]: 进入目录“/home/calvin/src/cocker/shbin”rm -f /bin/cocker_ldd_and_cp_lib64.shcp -rf cocker_ldd_and_cp_lib64.sh /bin/rm -f /bin/cocker_profile_template.shcp -rf cocker_profile_template.sh /bin/rm -f /bin/cocker_etc_profile_template.shcp -rf cocker_etc_profile_template.sh /bin/rm -f /bin/cocker_install_test.shcp -rf cocker_install_test.sh /bin/rm -f /bin/cocker_create_image_rhel-7.4-x86_64.shcp -rf cocker_create_image_rhel-7.4-x86_64.sh /bin/rm -f /bin/cocker_create_image_rhel-7.4-gcc-x86_64.shcp -rf cocker_create_image_rhel-7.4-gcc-x86_64.sh /bin/make[1]: 离开目录“/home/calvin/src/cocker/shbin”

如果没有发生错误则表明编译安装成功,从以上命令行获知:

  • 构建出开发内部使用头文件src/cocker/*.h安装到/usr/include/cocker_in,库文件libcocker_util.so安装到/lib64。开发内部文件仅用于编译。
  • 构建出可执行文件cockercockerinit安装到/bin
  • 自带脚本shbin/*.sh安装到/bin

3. 使用教程

3.1. cocker指令

不带选项执行cocker将得到所有指令和选项列表

# cockerUSAGE : cocker -v               -s images               -s containers               -a create (-m|--image) (image[:version])[,(image[:version])]... [ create options ] [ (-c|--container) (container) ] [ (-b|--boot) [ cgroup options ] [ (-t|--attach) | (-e|--exec) (cmd|"program para1 ...") ] ]               -a boot (-c|--container) (container) [ cgroup options ] [ (-t|--attach) | (-e|--exec) (cmd|"program para1 ...") ]               -a attach (-c|--container) (container)               -a shutdown (-c|--container) (container) [ (-f|--forcely) ]               -a kill (-c|--container) (container) [ (-f|--forcely) ]               -a destroy (-c|--container) (container) [ (-f|--forcely) ] [ (-h|--shutdown) ]               -a version (-m|--image) (image[:version]) [ --version (version) ]               -a vip (-c|--container) (container) --vip (ip)               -a port_mapping (-c|--container) (container) --port-mapping (src_port:dst_port)               -a volume (-c|--container) (container) --volume (host_path[:container_path])[ ...]               -a to_image --from-container (container) [ --verion (verion) ] --to-image (image)               -a to_container --from-image (image[:version]) (-m|--image) (image[:version])[,(image[:version])]... [ create options ] --to-container (container)               -a copy_image --from-image (image[:version]) --to-image (image[:version])               -a del_image (-m|--image) (image[:version])               -a import --image-file (file)               -a export (-m|--image) (image[:version])               -s ssearch --srepo (user@host)               -a install_testcreate options : [ --volume (host_path:container_path) ][ --volume ... ] [ --host (hostname) ] [ --net (BRIDGE|HOST|CUSTOM) ] [ --host-eth (eth) ] [ --vip (ip) ] [ --port-mapping (src_port:dst_port) ]cgroup options : [ --cpus [(cpu_num,...)|(cpu_num-cpu_num2)] ] [ --cpu-quota (percent%) ] [ --mem-limit (num|numM) ]  enable debug : [ (-d|--debug) ]

注意:首次执行cocker会自动创建镜像主目录images、容器主目录containers

3.1.1. 额外附加选项

cocker选项-d用于输出执行时调试信息,但并不是所有调试信息都会输出在屏幕上,某些不方便输出屏幕的信息会记录到日志文件中cocker.log,输出到屏幕上的信息也会复制一份到日志文件中。

cocker选项-f用于强制执行而忽略一些报错,这在一些指令中很有用。

3.1.2. 查询镜像列表

使用cocker指令-s images查询镜像主目录里的所有镜像。

# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           _          2018-11-10T09:21:12 24 MB

镜像目录层次为镜像名/版本号/镜像目录文件内容。如果没有版本号,版本号目录名为_

镜像名格式推荐(个人名或组织名)=(软件名)-(软件版本号)。版本号格式推荐x.y.z

我们可以使用指令-a install_test创建不同版本的测试镜像,多版本共存管理。

# cocker -a install_test --version "1.0.0"OK# cocker -a install_test --version "1.1.0"   OK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           _          2018-11-10T09:21:12 24 MBtest                           1.0.0      2018-11-14T07:20:06 24 MBtest                           1.1.0      2018-11-14T07:20:17 24 MB

注意:-a install_test创建的镜像仅作简单玩耍,里面很多环境都不完整。

3.1.3. 由镜像创建容器

使用cocker指令-a create由一个或多个镜像叠加创建容器。

# cocker -a create -m test --host test --net BRIDGE --vip 166.88.0.2 --port-mapping 19527:9527 -c testOK

-m (镜像列表):指定镜像列表,镜像名可以以(镜像名)(:版本号)格式指定版本号,本指令中允许不指定版本号,cocker会自动挑选一个最大版本号的镜像。多个镜像之间用,分隔。

--host (主机名):设置容器内的主机名。

--net (网络模型):设置容器网络模型,见前面网络模型章节。

--vip (ip):如果网络模型为BRIDGE,设置容器内的网卡IP。

--port-mapping (网络端口映射列表):如果网络模型为BRIDGE,设置外部或宿主机访问容器的网络端口映射列表,端口映射格式为(宿主机端口):(容器端口)。多个端口映射之间用,分隔。

-c (容器名):指定容器名,若不指定,与镜像同名。建议指定。

除了以上示例中用到的选项,以下为其它可选选项:

--host-eth (网卡名):指定宿主机对外网卡名。这在多物理网卡时使用。

--volume (磁盘卷映射列表):磁盘卷映射用于宿主机与容器之间目录共享,设置格式为(宿主机目录:容器目录)。多个磁盘卷映射使用各自的选项键前缀--volume

-b:容器创建完后立即启动。(后可追加所有启动容器选项)

3.1.4. 查询容器列表

使用cocker指令-s containers查询容器主目录中的所有容器以及状态。

# cocker -s containerscontainer_id         image                hostname   net        netns            size       status-----------------------------------------------------------------------------------------------------------test                 test                 test       BRIDGE     nns098F6BCD46    0 B        STOPED

容器test状态为停止。

3.1.5. 启动容器

使用cocker指令-a boot查询容器主目录中的所有容器以及状态。

# cocker -a boot -c testOK

除了以上示例中用到的选项,以下为其它可选选项:

--cpus (CPU核列表):容器限制的CPU核列表,比如第一个CPU核0,比如前两个CPU核0,1,比如第二个CPU核到第十个CPU核1-9

--cpu-quota (num%):容器限制的CPU利用率,比如完全利用100%,比如只能利用四分之一25%

--mem-limit (numM):容器限制的内存容量,比如100M

-t:容器启动后立即连接。

-e (cmd):指定容器根进程,默认使用cocker自带的cockerinit

启动后再查看容器状态

# cocker -s containers  container_id         image                hostname   net        netns            size       status-----------------------------------------------------------------------------------------------------------test                 test                 test       BRIDGE     nns098F6BCD46    0 B        RUNNING(89698)

注意:默认启动容器的根进程为cockerinit,可简单代替系统init进程回收孤儿进程、管理伪终端等功能。

3.1.6. 连接容器

如果使用cockerinit作为根进程启动容器,使用cocker指令-a attch连接至容器,cockerinit打开一个会话连接到容器中的伪终端。也可叠加ssh镜像在容器内启动ssh服务器,利用ssh连接至容器。

# cocker -a attach -c test   connect to container ok--- Welcome to cocker contrainer ---[root@test /root] 

注意:测试用镜像test已包含了绝大多数必备工具包,但不是所有。

在伪终端中输入exit加回车可关闭会话。

[root@test /root] exitlogout#

3.1.7. 停止容器

使用cocker指令-a shutdown停止容器。

# cocker -a shutdown -c test   OK
# cocker -s containers          container_id         image                hostname   net        netns            size       status-----------------------------------------------------------------------------------------------------------test                 test                 test       BRIDGE     nns098F6BCD46    0 B        STOPED

3.1.8. 杀死容器

使用cocker指令-a kill强杀容器。

3.1.9. 销毁容器

使用cocker指令-a destroy销毁容器。

注意:销毁容器后容器内所有修改将丢失。

# cocker -a destroy -c testOK

除了以上示例中用到的选项,以下为其它可选选项:

-h:先停止容器然后马上销毁容器。

-f:销毁容器过程中忽略错误,默认会中断销毁过程。

3.1.10. 修改镜像属性

3.1.10.1. 修改版本号

使用cocker指令-a version修改镜像版本号。

# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           _          2018-11-10T09:21:12 24 MB# cocker -a version -m test --version "1.0.1"OK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           1.0.1      2018-11-10T09:21:12 24 MB# cocker -a version -d -m "test:1.0.1" --version "1.0.2"OK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           1.0.2      2018-11-10T09:21:12 24 MB# cocker -a version -d -m "test:1.0.2"OK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           _          2018-11-10T09:21:12 24 MB

3.1.11. 修改容器属性

3.1.11.1. 修改VIP

使用cocker指令-a vip修改容器内网卡IP。

注意:必须容器停止后才能修改。

# cocker -a vip --vip 166.88.0.3 -c testOK

3.1.11.2. 修改容器端口映射

使用cocker指令-a port_mapping修改容器网络端口映射。

注意:必须容器停止后才能修改。

# cocker -a port_mapping --port-mapping 19528:9528 -c testOK

3.1.11.3. 修改外挂卷映射

使用cocker指令-a volume修改容器磁盘卷映射。

注意:必须容器停止后才能修改。

# cocker -a volume --volume "/tmp:/tmp" --volume "/mnt/cdrom:/mnt/cdrom" -c testOK

3.1.12. 镜像转换为容器

当需要修改镜像内文件时可先把镜像转换为容器,修改完后转换回镜像。

使用cocker指令-a to_container转换指定镜像为容器。

# cocker -a to_container --from-image test --host test --net BRIDGE --vip 166.88.0.2 --port-mapping 19527:9527 --to-container testOK

注意:几乎可使用所有指令-a create的选项。

3.1.13. 容器转换为镜像

当想把某一容器打包成镜像,可使用此指令。

使用cocker指令-a to_image转换指定容器为镜像。

注意:转换的容器必须是停止的。

# cocker -a to_image --from-container test --to-image testOK

3.1.14. 复制镜像

使用cocker指令-a copy_image可复制镜像。

# cocker -a copy_image --from-image test --to-image "test2:1.0.0"OK

3.1.15. 删除镜像

使用cocker指令-a del_image可删除镜像。

# cocker -a del_image -m "test2:1.0.0"   OK

3.1.16. 导出镜像

使用cocker指令-a export可导出镜像为镜像打包文件。

# cocker -a export -m "test:1.1.0"   OK

3.1.17. 导入镜像

使用cocker指令-a import可从镜像打包文件导入镜像库。

注意:镜像打包文件名扩展名必须是.cockerimage

# cocker -a del_image -m "test:1.1.0"OK# cocker -a import --image-file "test:1.1.0.cockerimage"   OK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           1.1.0      2018-11-14T08:53:13 24 MB

3.1.18. 上传镜像到ssh镜像库

ssh镜像库是利用ssh服务器来搭建镜像库。首先安装ssh服务器,创建镜像库用户,从客户端产生公钥文件分发给镜像库以方便免密登录。

# ssh-keygen -t rsa...# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

使用cocker指令-s ssearch可查看ssh镜像库里的镜像列表。

# cocker -s ssearch --srepo "[email protected]"OK

注意:cocker保存ssh镜像库地址配置[email protected]

还能加上子串通配选项--match

# cocker -s ssearch --match test

使用cocker指令-a spush上传镜像到ssh镜像库。

# cocker -a spush -m "test:1.0.0"OK# cocker -s ssearch --match testcocker -s ssearch   image_id                                      modify_datetime     size      ----------------------------------------------------------------------test:1.0.0                                    2018-11-14T9:05:48  11 MB

3.1.19. 从ssh镜像库下载镜像

使用cocker指令-a spull从ssh镜像库下载镜像。

# cocker -a del_image -m "test:1.0.0"OK# cocker -a spull -m "test:1.0.0"OK# cocker -s imagesimage_id                       version    modify_datetime     size      --------------------------------------------------------------------test                           1.0.0      2018-11-14T09:09:04 24 MB

3.1.20. 上传镜像到cocker自有镜像库

(待研发)

3.1.21. 从cocker自有镜像库下载镜像

(待研发)

3.1.22. 在容器外执行容器内命令

使用cocker指令-a run在容器外执行容器内命令

# cocker -a run -c test --cmd "hostname"test#

注意:容器是必须运行中状态。

3.1.23. 替换容器内文件内容

使用cocker指令-a rplfile替换容器内文件内容

# cocker -a rplfile -c test --template-file "/root/tpl.txt" --mapping-file "map.txt" --instance-file "/root/ins.txt"OK#

--template-file--instance-file分别为模板文件和实例化文件,按容器内路径,省略--instance-file将替换--template-file自己。

--mapping-file为替换配置,按容器外路径。一条规则为一行:

(KEY) (VALUE)\n(KEY) (VAL UE)\n...\n

替换示例:

tpl.txt

{ "leaf":"${LEAF}" }

map.txt

${LEAF} 我的树叶

替换后的ins.txt

{ "leaf":"我的树叶" }

此替换功能被广泛用于实例化容器内应用配置文件。

注意:容器是必须运行中状态。

3.1.24. 复制容器外文件或目录到容器内

使用cocker指令-a putfile复制容器外文件或目录到容器内

# cocker -a putfile -c test --src-file "map.txt" --dst-file "/root/"OK#

注意:也可通过ssh等服务复制。

3.1.25. 复制容器内文件或目录到容器外

使用cocker指令-a getfile复制容器内文件或目录到容器外

# cocker -a getfile -c test --src-file "/root/map.txt" --dst-file "./"OK#

注意:也可通过ssh等服务复制。

3.1.26. 得到容器根目录在容器外路径

使用cocker指令-s container_root得到容器根目录在容器外路径

# cocker -s container_root -c test/var/cocker/containers/test/merged#

注意:外露容器根目录可能不太合适。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap