docker checkpoint

Управляйте контрольно-пропускными пунктами

Эта команда является экспериментальной.

Эта команда является экспериментальной для демона Docker. Его не следует использовать в производственной среде. Чтобы включить экспериментальные функции в демоне Docker, отредактируйте демон.json и устанавливает для experimental значение true.

Экспериментальные функции обеспечивают ранний доступ к будущим функциям продукта. Данные функции предназначены только для тестирования и обратной связи, поскольку они могут меняться между выпусками без предупреждения или могут быть полностью удалены из будущих релизов. Экспериментальные функции не должны использоваться в производственных средах. Docker не предлагает поддержку экспериментальных функций.

Список текущих экспериментальных функций в интерфейсе командной строки Docker см. в статье Docker CLI Экспериментальные функции.

Использование

$ docker checkpoint COMMAND

Описание

Контрольная точка и восстановление — это экспериментальная функция, позволяющая заморозить работающий контейнер, установив на нем контрольную точку, которая превращает его состояние в множество файлов на диске. Позже контейнер можно восстановить с того момента, когда он был заморожен.

Это достигается с помощью инструмента под названием ЦРИУ, который является внешней зависимостью этой функции. Хороший обзор истории контрольных точек и восстановления в Docker доступен в этом Kubernetes сообщение в блоге.

Установка КРИУ

Если вы используете систему Debian, вы можете добавить CRIU PPA и установить с помощью apt- get с панели запуска criu .

В качестве альтернативы вы можете собрать CRIU из исходников.

Вам потребуется как минимум версия CRIU 2.0 для запуска контрольной точки и восстановления в Docker.

Варианты использования для контрольной точки и восстановления

Данная функция в настоящее время ориентирована на случаи использования одного хоста для контрольной точки и восстановления. Вот несколько:

  • Перезапуск хост-машины без остановки/запуска контейнеров

  • Ускорение времени запуска приложений с медленным запуском

  • «Перемотка» процессов на более ранний момент времени

  • «Криминалистическая отладка» запущенных процессов

Другим основным вариантом использования контрольной точки и восстановления вне Docker является динамическая миграция сервера с одной машины на другую. Это возможно с текущей реализацией, но в настоящее время не является приоритетом (поэтому рабочий процесс не оптимизирован для задачи).

Использование контрольной точки и восстановление

Представлена новая команда верхнего уровня docker checkpoint с тремя подкомандами:

  • 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

Данный процесс просто записывает увеличивающийся счётчик в стандартный вывод. Если вы запускает 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

Удаляет контрольную точку