Рад, что мы за рамками базовой настройки или вопросов, таких как Как выполнить установку модуля Python при запуске ноутбука Jupyter в Docker? , Рекомендации по написанию файлов Dockerfile
Этот сервер уже работает в нашей локальной сети,
мы уже используем его как совместный глубокий обучающий dev-сервер для нашей команды.
Наша команда становится более распределенной, и теперь мы собираемся переместить этот сервер в
собственный DMZ, например, разрешить групповой доступ через обычный интернет (и не только через VPN).
Поэтому главный вопрос заключается в том, как безопасно сделать это, настроить, пользователя, разрешения ...
В настоящее время мы установили драйверы cuda и т.д. на хост (Ubuntu),
используйте nvidia-docker, чтобы получить cuda в контейнеры Docker.
Чтобы сделать все драйверы cuda всех контейнеров совместимыми с версией cuda хоста,
мы используем ручной подход на основе dockerfile, где все контейнеры происходят от базового образа
nvcr.io/nvidia/cuda 9.0-cudnn7.1-devel-ubuntu16.04
(Оттуда промежуточный докер-файл устанавливает другие вещи), но, наконец, последний докер-файл
особенно (pip-) устанавливает jupyter-notebook вместе с необходимым (например, PyTorch 0.4.1) и всеми другими необходимыми инструментами для углубленного изучения.
Docker-контейнер запускается путем добавления общего тома в Docker-контейнер,
то есть папка на хосте, принадлежащем docker: docker с групповым закрепленным битом.
Там есть действительный машинный код для ноутбуков Jupyter.
nvidia-docker run --runtime=nvidia \
--interactive --tty \
--volume /srv:/srv \
--name ${CONT_NAME} \
--hostname ${CONT_HOSTNAME} \
${IMAGE_FULLNAME}
Затем другой скрипт запускает внутри контейнера записную книжку с выделенным токеном AUTH,
этим регулярно пользуются пользователи этого ноутбука Jupyter.
jupyter notebook --allow-root --ip 0.0.0.0 --no-browser --NotebookApp.token='<TEMP_AUTH_TOKEN>'
Брандмауэр DMZ разрешает веб-доступ только к этому одному порту Jupyter-Notebook.
Ноутбуку (вместе с кодом Python, связанным с GPU) требуется доступ к инструментальной цепочке cuda и графическим процессорам.
Это передается оболочкой nvidia-docker,
и в настоящее время мы запускаем все содержимое контейнера Docker как root .
Теперь здесь моя помощь: как бы мы это обеспечили, «все в пределах разумного»?
(Увы, моя работа состоит не в том, чтобы быть администратором на полной ставке, а в том, чтобы быть опытным парнем)
У меня есть ESP. «немного дурных предчувствий», предлагающих Jupyter-ноутбук, работающий от имени пользователя root (даже если он является корнем контейнера), в Интернете.
Я боюсь взломать Jupyter-Notebook, и уже в качестве root внутри контейнера выполнять вещи было бы одной вещью. Но оттуда спасайтесь от этого док-контейнера и владейте целым хостом ... как бы я помешал таким сценариям?
Итак, с одной стороны: Jupyter необходимо запустить и получить доступ к CUDA-GPU хоста, а также доставить ноутбук в Интернет ...
Я был бы очень признателен за более пояснительные ответы, намекающие также на некоторые подробные советы / ресурсы
для такого рода приключений, поэтому я на самом деле стал более профессиональным ...