docker 检查点
描述 | 管理检查点 |
---|---|
用法 | docker checkpoint |
实验的
此命令是实验性的。
实验性功能旨在用于测试和反馈,因为它们 功能或设计可能会在版本之间发生变化,恕不另行通知,或者 可以在将来的发行版中完全删除。
描述
Checkpoint and Restore 是一项实验性功能,允许您冻结正在运行的 container 通过指定检查点,将容器状态转换为文件集合 在磁盘上。稍后,可以从冻结的点恢复容器。
这是使用一个名为 CRIU 的工具完成的,该工具是一个 此功能的外部依赖项。历史概览 Docker 中的 checkpoint 和 restore 可在此 Kubernetes 博客文章中找到。
安装 CRIU
如果您使用的是 Debian 系统,则可以添加 CRIU PPA 并使用apt-get
从 CRIU 启动板。
或者,您可以从源代码构建 CRIU。
您至少需要 2.0 版本的 CRIU 才能在 Docker 中运行检查点和还原。
检查点和还原的使用案例
此功能目前主要针对 checkpoint 和 恢复。以下是一些:
- 在不停止/启动容器的情况下重新启动主机
- 加快慢启动应用程序的启动时间
- 将流程“倒回”到较早的时间点
- 正在运行的进程的“取证调试”
Docker 之外检查点和还原的另一个主要用例是实时 将服务器从一台计算机迁移到另一台计算机。这可以通过 当前实现,但当前不是优先级(因此工作流是 未针对任务进行优化)。
使用 checkpoint 和 restore
新的顶级命令docker checkpoint
,其中包含三个子命令:
docker checkpoint create
(创建新的检查点)docker checkpoint ls
(列出现有检查点)docker checkpoint rm
(删除现有检查点)
此外,--checkpoint
标志添加到docker container start
命令。
选项docker checkpoint create
:
Usage: docker checkpoint create [OPTIONS] CONTAINER CHECKPOINT
Create a checkpoint from a running container
--leave-running=false Leave the container running after checkpoint
--checkpoint-dir Use a custom checkpoint storage directory
要恢复容器:
Usage: docker start --checkpoint CHECKPOINT_ID [OTHER OPTIONS] CONTAINER
在容器上使用 checkpoint 和 restore 的示例:
$ docker run --security-opt=seccomp:unconfined --name cr -d busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'
abc0123
$ docker checkpoint create cr checkpoint1
# <later>
$ docker start --checkpoint checkpoint1 cr
abc0123
此过程仅记录 stdout 的递增计数器。如果您运行docker logs
在 running/checkpoint/restoring 之间,您应该看到计数器
在进程运行时增加,在进程冻结时停止,以及
恢复后,从上次中断的位置恢复。
已知限制
seccomp
仅受 CRIU 在最新内核中的支持。
外部端子(即docker run -t ..
) 不受支持。
如果您尝试为具有外部终端的容器创建 checkpoint,则
它失败了:
$ docker checkpoint create cr checkpoint1
Error response from daemon: Cannot checkpoint container c1: rpc error: code = 2 desc = exit status 1: "criu failed: type NOTIFY errno 0\nlog file: /var/lib/docker/containers/eb62ebdbf237ce1a8736d2ae3c7d88601fc0a50235b0ba767b559a1f3c5a600b/checkpoints/checkpoint1/criu.work/dump.log\n"
$ cat /var/lib/docker/containers/eb62ebdbf237ce1a8736d2ae3c7d88601fc0a50235b0ba767b559a1f3c5a600b/checkpoints/checkpoint1/criu.work/dump.log
Error (mount.c:740): mnt: 126:./dev/console doesn't have a proper root mount
子命令
命令 | 描述 |
---|---|
docker checkpoint create | 从正在运行的容器创建检查点 |
docker checkpoint ls | 列出容器的检查点 |
docker checkpoint rm | 删除检查点 |