gVisor и runsc

gVisor (runsc) — песочница, которая позволяет работать с контейнерами, но обеспечить, при этом, сходный с полноценной виртуализацией уровень безопасности.

Для запуска нам потребуется docker версии 17.09.0 и выше. Ставим или обновляем его, удобными для нас средствами (менеджер пакетов в ОС и т. п.). Готовый для работы бинарник runsc мы можем скачать из github репозитория проекта.

runsc gvisor

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 и обновить его.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *