Docker
Контрольно-пропускные пункты и контейнеры для восстановления
Поиск…
Компиляция докеров с включенной контрольной точкой и восстановлением (ubuntu)
Чтобы скомпилировать докер, рекомендуется иметь как минимум 2 ГБ оперативной памяти . Даже с этим иногда случается так, что лучше пойти на 4 ГБ .
убедитесь, что установлены git и make
sudo apt-get install make git-core -y
установить новое ядро (не менее 4.2)
sudo apt-get install linux-generic-lts-xenial
перезагрузите компьютер, чтобы активировать новое ядро
sudo reboot
компилировать
criu
который необходим для запуска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 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
компилировать экспериментальный докер (нам нужен докер для компиляции докеров)
cd ~ wget -qO- https://get.docker.com/ | sh sudo usermod -aG docker $(whoami)
На этом этапе нам нужно выйти из системы и снова войти в систему, чтобы иметь демон докеров. После повторного продолжения с шагом компиляции
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
Теперь у нас есть скомпилированный докер. Позволяет переместить двоичные файлы. Обязательно замените
<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_
).
Поздравляем, у вас теперь есть экспериментальный докер с возможностью проверки контейнера и его восстановления.
Обратите внимание, что экспериментальные функции НЕ готовы к производству
Контрольная точка и восстановление контейнера
# create docker container
export cid=$(docker run -d --security-opt seccomp:unconfined busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done')
# container is started and prints a number every second
# display the output with
docker logs $cid
# checkpoint the container
docker checkpoint create $cid checkpointname
# container is not running anymore
docker np
# lets pass some time to make sure
# resume container
docker start $cid --checkpoint=checkpointname
# print logs again
docker logs $cid