使用檢查點編譯 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,能夠檢查容器並將其恢復。

請注意,實驗性功能尚未準備好投入生產