Jupyter Data Science + Docker

Cкажем, вы хотите поиграть с некоторыми крутыми библиотеками данных в Python или R, но чего вы не хотите делать, так это тратить часы на установку Python или R, выясняя, какие библиотеки вам нужны, устанавливая каждую и затем бездельничать с утомительной задачей заставить все работать правильно на вашей версии Linux/Windows/OSX/OS9 — вот где Docker приходит на помощь! С помощью Docker мы можем мгновенно настроить и запустить блокнот Jupyter Data Science. Давайте начнем!

Docker позволяет нам запускать «готовый к работе» стек обработки данных Jupyter в так называемом контейнере:

Образ контейнера — это легкий, автономный исполняемый пакет части программного обеспечения, который включает в себя все необходимое для его запуска: код, среду выполнения, системные инструменты, системные библиотеки, настройки. Контейнерное программное обеспечение, доступное как для приложений для Linux, так и для Windows, всегда будет работать одинаково, независимо от среды. Контейнеры изолируют программное обеспечение от его окружения, например различий между средами разработки и промежуточной среды, и помогают уменьшить конфликты между командами, использующими разное программное обеспечение в одной инфраструктуре.

В чем же разница между контейнером и виртуальной машиной?

Контейнеры и виртуальные машины обладают схожими преимуществами изоляции и распределения ресурсов, но функционируют по-разному, поскольку контейнеры виртуализируют операционную систему, а не аппаратное обеспечение, контейнеры более переносимы и эффективны.

Чтобы начать работу с Docker, вам необходимо установить Docker. Загрузите соответствующий установщик для вашей среды здесь. После того, как вы установили Docker, перезагрузите компьютер, и мы можем перейти к настройке нашего контейнера Jupyter. При запуске контейнера вам нужно сообщить Docker, что такое базовый образ для этого контейнера.

Так что же такое изображение и как оно связано с контейнером?

Образ Docker состоит из ряда слоев. Каждый слой представляет собой инструкцию в Dockerfile образа. Каждый слой, кроме самого последнего, доступен только для чтения.

Контейнер — это просто работающий экземпляр образа. Реальная экономия времени при использовании Docker заключается в том, что кто-то другой уже создал образ, в котором есть все, что нам нужно, чтобы начать использовать полностью укомплектованный стек обработки данных Jupyter! Все, что нам нужно сделать, это указать Docker запустить контейнер на основе этого предварительно определенного образа. Для этого мы собираемся написать простой рецепт в виде компоновочного файла Docker. Сохраните файл ниже как docker-compose.yml в свой рабочий каталог:

version:                "3"
services:
  datascience-notebook:
      image:            jupyter/datascience-notebook
      volumes:
        - /Absolute/Path/To/Where/Your/Notebook/Files/Will/Be/Saved:/home/jovyan/work
      ports:
        - 8888:8888
      container_name:   datascience-notebook-container

После того, как вы сохранили файл, откройте его в своем любимом редакторе и измените раздел, который говорит:

/Absolute/Path/To/Where/Your/Notebook/Files/Will/Be/Saved

на путь на вашем локальном компьютере, где вы хотите сохранить свою работу. Убедитесь, что путь действительно существует, то есть какие-либо каталоги уже созданы. В противном случае при попытке запуска контейнера возникнут ошибки, и, что еще хуже, вы не сможете сохранить в контейнере свою работу!

Отлично, у нас есть готовый файл компоновки Docker, теперь мы можем использовать команду docker-compose для запуска нашего контейнера. Откройте терминал или командную строку, перейдите в свой рабочий каталог и выполните следующую команду:

docker-compose up

Вы должны увидеть что-то вроде следующего вывода в вашем терминале/командной строке:

[+] Running 2/2
- Network jup2local_default Created 0.8s
- Container datascience-notebook-container Created 0.1s
Attaching to datascience-notebook-container
datascience-notebook-container | Entered start.sh with args: jupyter lab
datascience-notebook-container | Executing the command: jupyter lab
datascience-notebook-container | [I 2022-05-21 09:41:35.624 ServerApp] jupyterlab | extension was successfully linked.
datascience-notebook-container | [W 2022-05-21 09:41:35.630 NotebookApp] 'ip' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
datascience-notebook-container | [W 2022-05-21 09:41:35.630 NotebookApp] 'port' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
datascience-notebook-container | [W 2022-05-21 09:41:35.630 NotebookApp] 'port' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
datascience-notebook-container | [I 2022-05-21 09:41:35.636 ServerApp] nbclassic | extension was successfully linked.
datascience-notebook-container | [I 2022-05-21 09:41:35.638 ServerApp] Writing Jupyter server cookie secret to /home/jovyan/.local/share/jupyter/runtime/jupyter_cookie_secret
datascience-notebook-container | [I 2022-05-21 09:41:36.236 ServerApp] notebook_shim | extension was successfully linked.
datascience-notebook-container | [I 2022-05-21 09:41:36.268 ServerApp] notebook_shim | extension was successfully loaded.
datascience-notebook-container | [I 2022-05-21 09:41:36.269 LabApp] JupyterLab extension loaded from /opt/conda/lib/python3.9/site-packages/jupyterlab
datascience-notebook-container | [I 2022-05-21 09:41:36.269 LabApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
datascience-notebook-container | [I 2022-05-21 09:41:36.274 ServerApp] jupyterlab | extension was successfully loaded.
datascience-notebook-container | [I 2022-05-21 09:41:36.286 ServerApp] nbclassic | extension was successfully loaded.
datascience-notebook-container | [I 2022-05-21 09:41:36.287 ServerApp] Serving notebooks from local directory: /home/jovyan
datascience-notebook-container | [I 2022-05-21 09:41:36.287 ServerApp] Jupyter Server 1.17.0 is running at:
datascience-notebook-container | [I 2022-05-21 09:41:36.287 ServerApp] http://e2002f706c56:8888/lab?token=2b7594c6127b633eeb04863e3ee27378715d4d199f26fad9
datascience-notebook-container | [I 2022-05-21 09:41:36.288 ServerApp] or http://127.0.0.1:8888/lab?token=2b7594c6127b633eeb04863e3ee27378715d4d199f26fad9
datascience-notebook-container | [I 2022-05-21 09:41:36.288 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
datascience-notebook-container | [C 2022-05-21 09:41:36.293 ServerApp] 
datascience-notebook-container |
datascience-notebook-container | To access the server, open this file in a browser:
datascience-notebook-container | file:///home/jovyan/.local/share/jupyter/runtime/jpserver-7-open.html
datascience-notebook-container | Or copy and paste one of these URLs:
datascience-notebook-container | http://e2002f706c56:8888/lab?token=2b7594c6127b633eeb04863e3ee27378715d4d199f26fad9
datascience-notebook-container | or http://127.0.0.1:8888/lab?token=2b7594c6127b633eeb04863e3ee27378715d4d199f26fad9

Последняя строка — это URL-адрес, который нам нужно скопировать и вставить в ваш браузер, чтобы получить доступ к вашему Jupyter:

http://127.0.0.1:8888/lab?token=2b7594c6127b633eeb04863e3ee27378715d4d199f26fad9

Как только вы перейдете по ссылке, вас встретит ваш собственный контейнерный сервис Jupyter! Вы можете узнать больше о том, что дает вам стек обработки данных Jupyter, перейдя по этой ссылке.

Чтобы создать свой первый блокнот, перейдите в рабочий каталог, затем нажмите кнопку «Создать» справа и выберите «Python 3», чтобы создать новый блокнот на основе Python 3. После того, как вы это сделаете, проверьте путь, по которому вы выбрали локальное сохранение своей работы, и вы должны увидеть сохраненный файл .ipynb вашего нового ноутбука!

Чтобы закрыть контейнер после завершения работы, просто нажмите Ctrl-C в терминале/командной строке. Вся ваша работа будет сохранена на вашей реальной машине по пути, который мы установили в нашем файле компоновки Docker.

Источник: https://towardsdatascience.com/jupyter-data-science-stack-docker-in-under-15-minutes-19d8f822bd45