在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:cocker开源软件地址:https://gitee.com/calvinwilliams/cocker开源软件介绍:容器引擎(cocker)
1. 概述1.1. cocker是什么
1.2. 兼容性笔者环境是 1.3. 系统架构在LXC中,容器只是内核命名空间隔离的根进程以及子进程树,隔离域有主机名字、进程空间、根文件系统、IPC、网络等。
1.3.1. 状态迁移图
1.3.2. 层叠文件系统层叠文件系统是多镜像容器的存储基础,cocker采用overlayfs作为其层叠文件系统引擎,可以叠加几乎无限的镜像层。
1.3.3. 网络
首次执行 1.3.4. 系统资源限制
1.3.5. 伪终端自带容器根进程接受客户端 1.4. 快速使用使用主控工具cocker快速创建一个小型测试镜像,里面调用了自带脚本 然后使用指令 # 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用户编译源码,确认 清理中间文件 # 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用户编译源码,前面加上 # 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” 如果没有发生错误则表明编译安装成功,从以上命令行获知:
3. 使用教程3.1. 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) ] 注意:首次执行 3.1.1. 额外附加选项
3.1.2. 查询镜像列表使用 # cocker -s imagesimage_id version modify_datetime size --------------------------------------------------------------------test _ 2018-11-10T09:21:12 24 MB 镜像目录层次为 镜像名格式推荐 我们可以使用指令 # 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 注意: 3.1.3. 由镜像创建容器使用 # cocker -a create -m test --host test --net BRIDGE --vip 166.88.0.2 --port-mapping 19527:9527 -c testOK
除了以上示例中用到的选项,以下为其它可选选项:
3.1.4. 查询容器列表使用 # cocker -s containerscontainer_id image hostname net netns size status-----------------------------------------------------------------------------------------------------------test test test BRIDGE nns098F6BCD46 0 B STOPED 容器 3.1.5. 启动容器使用 # cocker -a boot -c testOK 除了以上示例中用到的选项,以下为其它可选选项:
启动后再查看容器状态 # cocker -s containers container_id image hostname net netns size status-----------------------------------------------------------------------------------------------------------test test test BRIDGE nns098F6BCD46 0 B RUNNING(89698) 注意:默认启动容器的根进程为 3.1.6. 连接容器如果使用 # cocker -a attach -c test connect to container ok--- Welcome to cocker contrainer ---[root@test /root] 注意:测试用镜像 在伪终端中输入 [root@test /root] exitlogout# 3.1.7. 停止容器使用 # 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. 杀死容器使用 3.1.9. 销毁容器使用 注意:销毁容器后容器内所有修改将丢失。 # cocker -a destroy -c testOK 除了以上示例中用到的选项,以下为其它可选选项:
3.1.10. 修改镜像属性3.1.10.1. 修改版本号使用 # 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 --vip 166.88.0.3 -c testOK 3.1.11.2. 修改容器端口映射使用 注意:必须容器停止后才能修改。 # cocker -a port_mapping --port-mapping 19528:9528 -c testOK 3.1.11.3. 修改外挂卷映射使用 注意:必须容器停止后才能修改。 # cocker -a volume --volume "/tmp:/tmp" --volume "/mnt/cdrom:/mnt/cdrom" -c testOK 3.1.12. 镜像转换为容器当需要修改镜像内文件时可先把镜像转换为容器,修改完后转换回镜像。 使用 # cocker -a to_container --from-image test --host test --net BRIDGE --vip 166.88.0.2 --port-mapping 19527:9527 --to-container testOK 注意:几乎可使用所有指令 3.1.13. 容器转换为镜像当想把某一容器打包成镜像,可使用此指令。 使用 注意:转换的容器必须是停止的。 # cocker -a to_image --from-container test --to-image testOK 3.1.14. 复制镜像使用 # cocker -a copy_image --from-image test --to-image "test2:1.0.0"OK 3.1.15. 删除镜像使用 # cocker -a del_image -m "test2:1.0.0" OK 3.1.16. 导出镜像使用 # cocker -a export -m "test:1.1.0" OK 3.1.17. 导入镜像使用 注意:镜像打包文件名扩展名必须是 # 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 --srepo "[email protected]"OK 注意: 还能加上子串通配选项 # cocker -s ssearch --match test 使用 # 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 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 -c test --cmd "hostname"test# 注意:容器是必须运行中状态。 3.1.23. 替换容器内文件内容使用 # cocker -a rplfile -c test --template-file "/root/tpl.txt" --mapping-file "map.txt" --instance-file "/root/ins.txt"OK#
(KEY) (VALUE)\n(KEY) (VAL UE)\n...\n 替换示例:
{ "leaf":"${LEAF}" }
${LEAF} 我的树叶 替换后的 { "leaf":"我的树叶" } 此替换功能被广泛用于实例化容器内应用配置文件。 注意:容器是必须运行中状态。 3.1.24. 复制容器外文件或目录到容器内使用 # cocker -a putfile -c test --src-file "map.txt" --dst-file "/root/"OK# 注意:也可通过ssh等服务复制。 3.1.25. 复制容器内文件或目录到容器外使用 # cocker -a getfile -c test --src-file "/root/map.txt" --dst-file "./"OK# 注意:也可通过ssh等服务复制。 3.1.26. 得到容器根目录在容器外路径使用 # cocker -s container_root -c test/var/cocker/containers/test/merged# 注意:外露容器根目录可能不太合适。 |
请发表评论