docker checkpoint
| Descripción | Gestiona puntos de control (checkpoints) |
|---|---|
| Uso | docker 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
| Comando | Descripción |
|---|---|
docker checkpoint create | Crea un punto de control a partir de un contenedor en ejecución |
docker checkpoint ls | Lista los puntos de control de un contenedor |
docker checkpoint rm | Elimina un punto de control |