Compartir comentarios
Las respuestas se generan en base a la documentación.

docker checkpoint

DescripciónGestiona puntos de control (checkpoints)
Usodocker checkpoint

</span>
<strong>Experimental</strong>

Este comando es experimental.

Las funciones experimentales están destinadas a pruebas y comentarios, ya que su funcionalidad o diseño pueden cambiar entre versiones sin previo aviso o eliminarse por completo en una versión futura.

Descripción

La creación de puntos de control (checkpoint) y su posterior restauración (restore) es una característica experimental que te permite congelar un contenedor en ejecución especificando un punto de control, lo que convierte el estado del contenedor en una colección de archivos en disco. Más tarde, el contenedor se puede restaurar desde el punto en que se congeló.

Esto se logra utilizando una herramienta llamada CRIU, que es una dependencia externa de esta característica. Puedes encontrar una buena descripción general de la historia de checkpoint y restore en Docker en esta publicación del blog de Kubernetes.

Instalar CRIU

Si usas un sistema Debian, puedes añadir el PPA de CRIU e instalarlo con apt-get desde el launchpad de CRIU.

Alternativamente, puedes compilar CRIU desde el código fuente.

Necesitas al menos la versión 2.0 de CRIU para ejecutar checkpoint y restore en Docker.

Casos de uso de checkpoint y restore

Esta característica se centra actualmente en casos de uso de un solo host para checkpoint y restore. Aquí tienes algunos:

  • Reiniciar la máquina host sin detener ni iniciar los contenedores.
  • Acelerar el tiempo de inicio de aplicaciones de arranque lento.
  • "Retroceder" procesos a un punto anterior en el tiempo.
  • "Depuración forense" de procesos en ejecución.

Otro caso de uso principal de checkpoint y restore fuera de Docker es la migración en vivo de un servidor de una máquina a otra. Esto es posible con la implementación actual, pero no es una prioridad en este momento (y por lo tanto el flujo de trabajo no está optimizado para esa tarea).

Usar checkpoint y restore

Se introduce un nuevo comando de nivel superior docker checkpoint, con tres subcomandos:

  • docker checkpoint create (crea un nuevo punto de control)
  • docker checkpoint ls (lista los puntos de control existentes)
  • docker checkpoint rm (elimina un punto de control existente)

Además, se añade una flag --checkpoint al comando docker container start.

Las opciones para docker checkpoint create:

Uso:  docker checkpoint create [OPTIONS] CONTAINER CHECKPOINT

Crea un punto de control a partir de un contenedor en ejecución

  --leave-running=false    Deja el contenedor en ejecución después del punto de control
  --checkpoint-dir         Usa un directorio de almacenamiento de puntos de control personalizado

Y para restaurar un contenedor:

Uso:  docker start --checkpoint CHECKPOINT_ID [OTHER OPTIONS] CONTAINER

Ejemplo de uso de checkpoint y restore en un contenedor:

$ 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

# <más tarde>
$ docker start --checkpoint checkpoint1 cr
abc0123

Este proceso solo registra un contador incremental en stdout. Si ejecutas docker logs entre la ejecución, el checkpoint y la restauración, deberías ver que el contador aumenta mientras el proceso se está ejecutando, se detiene mientras está congelado y se reanuda desde el punto en que lo dejó una vez que lo restauras.

Limitaciones conocidas

seccomp solo es compatible con CRIU en kernels muy actualizados.

Las terminales externas (ej. docker run -t ..) no son compatibles. Si intentas crear un punto de control para un contenedor con una terminal externa, fallará:

$ 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

Subcomandos

ComandoDescripción
docker checkpoint createCrea un punto de control a partir de un contenedor en ejecución
docker checkpoint lsLista los puntos de control de un contenedor
docker checkpoint rmElimina un punto de control