Docker Compile docker with checkpoint and restore enabled (ubuntu)


In order to compile docker its recommended you have at least 2 GB RAM. Even with that it fails sometimes so its better to go for 4GB instead.

  1. make sure git and make is installed

    sudo apt-get install make git-core -y
  2. install a new kernel (at least 4.2)

    sudo apt-get install linux-generic-lts-xenial
  3. reboot machine to have the new kernel active

    sudo reboot
  4. compile criu which is needed in order to run docker checkpoint

    sudo apt-get install libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libcap-dev -y
    wget -O - | tar -xj
    cd criu-2.4
    make install-lib
    make install-criu
  5. check if every requirement is fulfilled to run criu

    sudo criu check
  6. compile experimental docker ( we need docker to compile docker)

    cd ~
    wget -qO- | sh
    sudo usermod -aG docker $(whoami)
  • At this point we have to logoff and login again to have a docker daemon. After relog continue with compile step

    git clone
    cd docker
    git checkout docker-checkpoint-restore
    make #that will take some time - drink a coffee
    DOCKER_EXPERIMENTAL=1 make binary
  1. We now have a compiled docker. Lets move the binaries. Make sure to replace <version> with the version installed

    sudo service docker stop
    sudo cp $(which docker) $(which docker)_ ; sudo cp ./bundles/latest/binary-client/docker-<version>-dev $(which docker)
    sudo cp $(which docker-containerd) $(which docker-containerd)_ ; sudo cp ./bundles/latest/binary-daemon/docker-containerd $(which docker-containerd)
    sudo cp $(which docker-containerd-ctr) $(which docker-containerd-ctr)_ ; sudo cp ./bundles/latest/binary-daemon/docker-containerd-ctr $(which docker-containerd-ctr)
    sudo cp $(which docker-containerd-shim) $(which docker-containerd-shim)_ ; sudo cp ./bundles/latest/binary-daemon/docker-containerd-shim $(which docker-containerd-shim)
    sudo cp $(which dockerd) $(which dockerd)_ ; sudo cp ./bundles/latest/binary-daemon/dockerd $(which dockerd)
    sudo cp $(which docker-runc) $(which docker-runc)_ ; sudo cp ./bundles/latest/binary-daemon/docker-runc $(which docker-runc)
    sudo service docker start

Dont worry - we backed up the old binaries. They are still there but with an underscore added to its names (docker_).

Congratulation you now have an experimental docker with the ability to checkpoint a container and restore it.

Please note that experimental features are NOT ready for production