【聊天红包软件源码】【java 源码阅读顺序】【超拾惠源码】criu源码编译

1.Docker Checkpoint/Restore

criu源码编译

Docker Checkpoint/Restore

        唔,暂时小记一下checkpoint / restore,希望之后能回顾并深入认识下目前的问题。

        CRIU全称“Checkpoint / Restore in Userspace”,是一个为Linux提供检查点/恢复功能的工具,主要是对运行中的应用进行冻结(freeze)再基于其在磁盘上的所有文件建立检查点,并根据checkpoint恢复冻结时状态并继续运行。CRIU可以运用到场景包括:应用热迁移(live migration)、快照、远程调试(debugging)等等。CRIU为OpenVZ、LXZ/LXD、Docker等都提供了很好的支持。

        /proc是一个基于内存的文件系统,包括CPU、内存、分区划分、[I/O地址]、直接内存访问通道和正在运行的进程等等,Linux通过/proc访问内核内部数据结构及更改内核设置等。Checkpoint很大程度上是基于/proc文件系统进行的,主要依赖/proc获取文件描述符信息、管道参数、内存映射等。

        Checkpoint通过进程转存器(process dumper)进行以下步骤:

        Restore恢复过程主要进行以下步骤:

        Docker container实际上也是一个进程,故CRIU实质上是对容器进程进行checkpoint/restore。

        源码装CRIU有一丢丢麻烦,记得把官网说的那些库都下完整哦。

        docker虽然提供了checkpoint,但切换至experimental下才能用,新建/etc/docker/daemon.json文件,(docker的配置文件,默认没有)。

        若该文件参数更改很多,就会起冲突......解决办法:尽量只将自己需要更改的配置参数写入就好,若还冲突,就启动docker时手动指定参数或脚本启动吧。

        另外,我使用docker 及之后的版本时,checkpoint无法正常使用,主要出现以下问题:

        据说是?源码聊天红包软件源码moby的原因,但看Stackflow上的问题也还是open的,关闭了一个但感觉他关的莫名其妙;有一个问题下,开发人员说解决了,但还未推到新版本。我的解决办法:试验之后,建议使用较新版本.进行checkpoint/restore,可以正常使用,可能版本(小生年方,尚未婚娶)太新了脚跟还没站稳。

        现在可以开始愉快地使用docker checkpoint了!!Docker CLI提供了checkpoint命令。

        create

        ls

        rm无话可说

        start

        启动时没有单独的命令,但在container start可以指定checkpoint选项参数,如将容器从/home/vickee/chkps/目录下的chkp0恢复:

        注意:在创建checkpoint时,若我们指定的路径为/home/PATH,则恢复时还需要具体指定到该路径下的/home/PATH/[CONTAINER_FULL_ID]/checkpoints。因为恢复时,我们可能新建容器,或者将另一个容器从别的容器的checkpoint恢复,故需自己根据checkpoint信息进行路径完善。

        CRIU对最新内核的支持有限,且好像在较新版本中,移除了--checkpoint-dir即指定目录这一特性。

        若容器运行时有用external terminal( docker run -t ),checkpoint会失败的。[ 参数-t 让docker分配一个伪终端并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开,常一起使用。]

        links:

        https://criu.org/Docker

        https://criu.org/Installation

        https://criu.org/Checkpoint/Restore

更多内容请点击【知识】专栏

精彩资讯