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刪除檢查點