# docker checkpoint

**Descripción:** Gestiona puntos de control (checkpoints)

**Uso:** `docker checkpoint`





> [!NOTE]

> **Experimental**
>
> 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](https://criu.org), 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](https://kubernetes.io/blog/2015/07/how-did-quake-demo-from-dockercon-work/).

### Instalar CRIU

Si usas un sistema Debian, puedes añadir el PPA de CRIU e instalarlo con `apt-get` [desde el launchpad de CRIU](https://launchpad.net/~criu/+archive/ubuntu/ppa).

Alternativamente, puedes [compilar CRIU desde el código fuente](https://criu.org/Installation).

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`:

```console
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:

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

Ejemplo de uso de checkpoint y restore en un contenedor:

```console
$ 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á:

```console
$ 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`](https://docs-docker.esdocu.com/reference/cli/docker/checkpoint/create/) | Crea un punto de control a partir de un contenedor en ejecución |

 | [`docker checkpoint ls`](https://docs-docker.esdocu.com/reference/cli/docker/checkpoint/ls/) | Lista los puntos de control de un contenedor |

 | [`docker checkpoint rm`](https://docs-docker.esdocu.com/reference/cli/docker/checkpoint/rm/) | Elimina un punto de control |



