docker checkpoint
| 描述 | 管理检查点 |
|---|---|
| 用法 | docker checkpoint |
实验性
此命令是实验性的。
实验性功能旨在用于测试和反馈,因为它们的功能或设计可能会在版本之间未经警告而更改,或者在未来的版本中被完全删除。
描述
检查点和恢复是一项实验性功能,它允许您通过指定检查点来冻结正在运行的容器,将容器状态转换为磁盘上的一组文件。稍后,可以从冻结点恢复容器。
这是通过一个名为 CRIU 的工具实现的,它是此功能的外部依赖项。此 Kubernetes 博客文章 中提供了 Docker 中检查点和恢复历史的良好概述。
安装 CRIU
如果您使用 Debian 系统,您可以添加 CRIU PPA 并使用 `apt-get` 从 CRIU launchpad 安装。
或者,您可以 从源代码构建 CRIU。
您需要 CRIU 2.0 或更高版本才能在 Docker 中运行检查点和恢复。
检查点和恢复的用例
此功能目前专注于检查点和恢复的单主机用例。以下是一些:
- 在不停止/启动容器的情况下重启主机
- 加快慢速启动应用程序的启动时间
- 将进程“倒回”到较早的时间点
- 对正在运行的进程进行“取证调试”
检查点和恢复在 Docker 之外的另一个主要用例是将服务器从一台机器实时迁移到另一台机器。这在当前实现中是可能的,但目前不是优先事项(因此工作流程未针对此任务进行优化)。
使用检查点和恢复
引入了一个新的顶级命令 `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
在容器上使用检查点和恢复的示例
$ 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
此过程只将递增计数器记录到标准输出。如果您在运行/检查点/恢复之间运行 `docker logs`,您应该会看到计数器在进程运行时增加,在冻结时停止,并在恢复后从它离开的点恢复。
已知限制
`seccomp` 仅受 CRIU 在非常新的内核中支持。
不支持外部终端(即 `docker run -t ..`)。如果您尝试为具有外部终端的容器创建检查点,它将失败
$ 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 | 删除检查点 |