gVisor (runsc) — песочница, которая позволяет работать с контейнерами, но обеспечить, при этом, сходный с полноценной виртуализацией уровень безопасности.
Для запуска нам потребуется docker версии 17.09.0 и выше. Ставим или обновляем его, удобными для нас средствами (менеджер пакетов в ОС и т. п.). Готовый для работы бинарник runsc мы можем скачать из github репозитория проекта.
1. Работаю я в Fedora, Docker там установлен из репозитория разработчиков.
# docker -v Docker version 18.09.4, build d14af54
2. Добавим в систему runsc:
# wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc # wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc.sha512 # sha512sum -c runsc.sha512 # mv runsc /usr/local/bin/ # chmod +x /usr/local/bin/runsc
Этот компонент так же готов к работе.
# runsc --version runsc version 124bafc81c72 spec: 1.0.1-dev
3. Прописываем нужный runtime в конфиге docker’a /etc/docker/daemon.json:
{ "runtimes": { "runsc": { "path": "/usr/local/bin/runsc" } } }
4. И перезапускаем сервис.
# systemctl restart docker
5. Теперь нам остаётся просто запустить контейнер, так, как мы делаем это обычно:
# docker run --runtime=runsc -it fedora /bin/bash
И на хосте мы увидим (например, с помощью lsof или ps), что запустился он через соответствующий рантайм.
Немного о проблемах.
В некоторых дистрибутивах, после создания\изменения /etc/docker/daemon.json сервис docker может не перезапуститься, при этом, в логах осядет ошибка запуска с рантаймом:
unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: runtime
В этом случае, стоит проверить, не обозначен ли runtime в unit файле. В Fedora, например, у меня обнаружилось следующее:
--add-runtime oci=/usr/libexec/docker/docker-runc-current \ --default-runtime=oci \
А если при запуске мы получаем ошибку вида:
flag provided but not defined: -console
То стоит ещё раз внимательно проверить версию Docker и обновить его.