使用檢查點編譯 docker 並啟用恢復(ubuntu)
為了編譯 docker,建議你至少有 2 GB RAM 。即便如此,它有時會失敗,所以最好選擇 4GB 。
-
確保安裝了 git 和 make
sudo apt-get install make git-core -y
-
安裝新核心(至少 4.2)
sudo apt-get install linux-generic-lts-xenial
-
重啟機器以使新核心處於活動狀態
sudo reboot
-
編譯執行
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
-
檢查是否滿足每個要求執行 criu
sudo criu check
-
編譯實驗 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
-
我們現在有一個編譯的 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,能夠檢查容器並將其恢復。