docker checkpoint
| 内容説明 | チェックポイントを管理します。 |
|---|---|
| 利用方法 | docker checkpoint |
試験的
このコマンドは試験的なものです。
試験的機能はテスト向けに意図されたものであり、その機能に関してのフィードバックを得る目的があります。 この機能はリリース時に予告なく変更される場合があり、また今後のリリースに向けて削除されることがあります。
内容説明
チェックポイントとリストアは試験的な機能です。 この機能を用いるとチェックポイントを指定して実行中コンテナーを一時停止させることができます。 コンテナーの状態はディスク上の一連のファイルに変換されます。 後にコンテナーは一時停止されたポイントから回復させることができます。
この機能は CRIU と呼ばれる外部依存ツールを使って実現しています。 Docker におけるチェックポイントとリストアに関する開発経緯については Kubernetes ブログポスト にまとめられています。
CRIU のインストール
Debian システムを利用している場合、CRIU PPA を追加することで CRIU launchpad から apt-get を使ってインストールすることができます。
別の方法として CRIU をソースからビルド することもできます。
Docker におけるチェックポイントとリストア機能を利用するには、CRIU のバージョンが最低でも 2.0 でなければなりません。
チェックポイントとリストアのユースケース
本機能は今のところ、単一のホストについてチェックポイントとリストアを行うことを想定しています。 ユースケースとしていくつかをあげます。
- コンテナーを停止/再起動することなく、ホストマシンを再起動できます。
- 起動に時間がかかるアプリケーションの初動を早めることができます。
- プロセスを以前の時点に「巻き戻す」ことができます。
- 実行プロセスを「フォレンジックに (法的に) デバッグ」することができます。
チェックポイントとリストアについてよく見られるユースケースは、1 つのマシン上のサーバーを別のマシンにライブ移行することです。 これは現時点の実装において可能ですが、ただし今のところ優先度は高く設定されていません (したがってこのタスクに対する作業は最適には行われていません)。
チェックポイントとリストアの利用
トップレベルコマンド docker checkpoint が導入されており、そこに 3 つのサブコマンドがあります。
docker checkpoint create(新規チェックポイントの生成)docker checkpoint ls(既存チェックポイントの一覧表示)docker checkpoint rm(既存チェックポイントの削除)
さらに docker container start コマンドには --checkpoint フラグが加えられています。
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
この処理プロセスでは、カウンターを加算して stdout にログ出力します。
コンテナーの起動/チェックポイント設定/リストアの各タイミングで 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 | チェックポイントを削除します。 |