Docker Experimental (pre 1.10) with Checkpoint/Restore using CRIU
Pre-releaseLast Update: 2016-02-16
For easy testing and experimenting, below you can find a compiled version of Docker Experimental v1.10.0 with native checkpoint and restore functionality (compiled from the cr-defunct branch of @boucher/docker).
Also, a compiled version of CRIU v1.8.1 (compiled from the no-netns branch of @boucher/criu) with support for a new proposed flag to "skip" network namespaces when checkpointing and restoring. And finally, libprotobuf, a dependency.
A few notes about this release:
- Networking support is working!
- seccomp is now on by default in Docker, but only supported in CRIU with kernel 4.13 or newer, so you'll likely want to start your containers with the flag
--security-opt seccomp:unconfined
Example use:
docker run -d --security-opt seccomp:unconfined busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'
If you examine the logs at this point, you should see prints of an increasing integer counter.
docker checkpoint <id>
docker restore <id>
Checking the logs again should show that the counter is still increasing. (Waiting a bit between checkpoint and restore can increase your confidence that the process actually stopped for a while)
NOTE: you may need additional dependencies:
$ ldd `which criu`
linux-vdso.so.1 => (0x00007fffc3094000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8f0d358000)
libprotobuf-c.so.0 => /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.0 (0x00007f8f0d148000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8f0cf43000)
libnl-3.so.200 => /lib/x86_64-linux-gnu/libnl-3.so.200 (0x00007f8f0cd29000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8f0c964000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8f0d57e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8f0c65d000)