使用检查点编译 docker 并启用恢复(ubuntu)

为了编译 docker,建议你至少有 2 GB RAM 。即便如此,它有时会失败,所以最好选择 4GB

  1. 确保安装了 git 和 make

    sudo apt-get install make git-core -y
    
  2. 安装新内核(至少 4.2)

    sudo apt-get install linux-generic-lts-xenial
    
  3. 重启机器以使新内核处于活动状态

    sudo reboot
    
  4. 编译运行 docker checkpoint 所需的 criu

    sudo apt-get install libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libcap-dev -y
    wget http://download.openvz.org/criu/criu-2.4.tar.bz2 -O - | tar -xj
    cd criu-2.4
    make
    make install-lib
    make install-criu
    
  5. 检查是否满足每个要求运行 criu

    sudo criu check
    
  6. 编译实验 docker(我们需要 docker 来编译 docker)

    cd ~
    wget -qO- https://get.docker.com/ | sh
    sudo usermod -aG docker $(whoami)
    
  • 此时我们必须注销并再次登录才能拥有一个 docker 守护进程。在重新编译后继续编译步骤

    git clone https://github.com/boucher/docker
    cd docker
    git checkout docker-checkpoint-restore
    make #that will take some time - drink a coffee
    DOCKER_EXPERIMENTAL=1 make binary
    
  1. 我们现在有一个编译的 docker。让我们移动二进制文件。确保使用安装的版本替换 <version>

    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
    

别担心 - 我们备份了旧的二进制文件。它们仍然存在,但在其名称中添加了下划线(docker_)。

祝贺你现在拥有一个实验性的 docker,能够检查容器并将其恢复。

请注意,实验性功能尚未准备好投入生产