docker checkpoint
読む時間の目安: 4 分
説明
Manage checkpoints
API 1.25 以上
このコマンドを利用するには、クライアントとデーモンの API はともに、最低でも
1.25
である必要があります。
クライアント上においてdocker version
コマンドを実行して、クライアントとデーモンの API バージョンを確認してください。
このコマンドは試験的なものです
このコマンドは Docker デーモンにおいて試験的なものです。 本番環境では利用しないでください。
Docker デーモンにおいて試験的機能を有効にする場合は、daemon.json ファイルを編集して、
experimental
をenabled
に設定してください。試験的な機能は、将来の製品に搭載される機能をいち早く試すことができるものです。 ただし現段階でのこの機能は、テストとフィードバックのためだけを意図しています。 したがってリリース時には予告なく変更される場合があり、将来のリリースでは完全に削除されることもあります。 試験的な機能は本番環境では利用しないでください。 Docker ではこの試験的機能に対するサポートは行っていません。
Docker CLI における現時点での試験的機能については Docker CLI 試験的機能 の一覧を参照してください。
利用方法
$ docker checkpoint COMMAND
追加説明
Checkpoint and Restore is an experimental feature that allows you to freeze a running container by checkpointing it, which turns its state into a collection of files on disk. Later, the container can be restored from the point it was frozen.
This is accomplished using a tool called CRIU, which is an external dependency of this feature. A good overview of the history of checkpoint and restore in Docker is available in this Kubernetes blog post.
Installing CRIU
If you use a Debian system, you can add the CRIU PPA and install with apt-get
from the criu launchpad.
Alternatively, you can build CRIU from source.
You need at least version 2.0 of CRIU to run checkpoint and restore in Docker.
Use cases for checkpoint and restore
This feature is currently focused on single-host use cases for checkpoint and restore. Here are a few:
- Restarting the host machine without stopping/starting containers
- Speeding up the start time of slow start applications
- “Rewinding” processes to an earlier point in time
- “Forensic debugging” of running processes
Another primary use case of checkpoint and restore outside of Docker is the live migration of a server from one machine to another. This is possible with the current implementation, but not currently a priority (and so the workflow is not optimized for the task).
Using checkpoint and restore
A new top level command docker checkpoint
is introduced, with three subcommands:
docker checkpoint create
(creates a new checkpoint)docker checkpoint ls
(lists existing checkpoints)docker checkpoint rm
(deletes an existing checkpoint)
Additionally, a --checkpoint
flag is added to the docker container start
command.
The options for 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
And to restore a container:
Usage: docker start --checkpoint CHECKPOINT_ID [OTHER OPTIONS] CONTAINER
Example of using checkpoint and restore on a 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
This process just logs an incrementing counter to stdout. If you run docker logs
in between running/checkpoint/restoring you should see that the counter
increases while the process is running, stops while it’s checkpointed, and
resumes from the point it left off once you restore.
Known limitations
seccomp is only supported by CRIU in very up to date kernels.
External terminal (i.e. docker run -t ..
) is not supported at the moment.
If you try to create a checkpoint for a container with an external terminal,
it would fail:
$ 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 | Docker CLI の基本コマンド |
下位コマンド
コマンド | 説明 |
docker checkpoint create | 実行中コンテナーからチェックポイントを生成します。 |
docker checkpoint ls | コンテナーにおけるチェックポイントを一覧表示します。 |
docker checkpoint rm | チェックポイントを削除します。 |