使用检查点编译 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,能够检查容器并将其恢复。