Покажем, как использовать docker-compose для Python и Jupyter
В данной статье мы рассмотрим, что такое docker-compose, и как этот инструмент можно использовать для языка Python и Jupyter.
Команда compose – это инструмент для Docker, используемый для определения и запуска нескольких приложений-контейнеров, в которых файл compose используется для определения необходимых для приложения сервисов.
Docker-compose
При такой настройке приложения все сервисы можно запустить с помощью одной команды. Благодаря этому приложения могут быть созданы, если выполнить четыре простых шага:
- Настроить Dockerfile для определения среды приложения.
- Добавить файл требований для загрузки пакетов Python.
- Создать файл docker-compose.yml для определения сервисов, которые нужны приложению. Они будут работать вместе в изолированной среде.
- Запустить сборку docker-compose, чтобы создать приложение, и docker-compose, чтобы запустить это самое приложение.
Требования и настройка Dockerfile
Как оказалось, у дистрибутива Intel в Docker есть образы Python2 и Python3 либо с ядром, либо с полной конфигурацией. Python2 является более простым и понятным в плане работы с классами, поэтому в этой статье речь будет идти о версии Intel Python2, установленной на minicoda.
# Set the base image using miniconda FROM continuumio/miniconda3:4.3.27 # Set environmental variable(s) ENV ACCEPT_INTEL_PYTHON_EULA=yes
Образ установился в /home/notebooks. Также можно установить его как рабочий каталог с помощью команды WORKDIR, которая установит образ прямо в корневую папку. Это сэкономит пару секунд при запуске.
# Set working directory WORKDIR /home/notebooks
После настройки рабочего каталога адаптируем запуск, добавив файлы требований. Сначала файл был добавлен в каталог /app/directory, а затем вызван с помощью pip. Этот метод является одним из наиболее распространенных для установки зависимостей Python. Это также сокращает время загрузки, позволяя размещать любые зависимости Python в отдельном файле.
# Add requirements file ADD requirements.txt /app/ # Installs, clean, and update RUN apt-get update \ && apt-get clean \ && apt-get update -qqq \ && apt-get install -y -q g++ \ && conda config --add channels intel \ && conda install -y -q intelpython2_full=2018.0.1 python=2 \ && pip install --upgrade pip \ && pip install -r /app/requirements.txt
После настройки файла требований добавим строку для CMD. В CMD команда для контейнера выполняется согласно инструкции по умолчанию, если не указана другая команда. Исходя из этого, командой по умолчанию будет запуск jupyter notebook.
# Run shell command for notebook on start CMD jupyter notebook --port=8888 --no-browser --ip=0.0.0.0 --allow-root
Определение сервисов
Следующим шагом после адаптации Dockerfile будет определение сервисов в файле YAML. Этот файл предназначен для настройки нескольких сервисов с помощью Docker, которые используются вместе со средой, уже указанной в Dockerfile. Таким образом, файл YAML будет использоваться для настройки сервисов, которые затем могут быть созданы и запущены с помощью одной команды.
На данный момент файл YAML является единственным сервисом, который позволяет настраивать Jupyter notebook для Intel Python2. Этому контейнеру обычно дают имя python_notebook и используют порт 8888.
version: '3' services: notebook: container_name: python_notebook labels: description: Intel Python 2 using Jupyter Notebooks name: jupyter notebook ports: - "8888:8888" volumes: - ~/Documents/notebooks:/home/notebooks build: .
Позже этот файл может быть изменен для добавления сервисов баз данных, других инструментов анализа данных и многого другого.
Сборка и запуск docker-compose
После обновления Dockerfile, добавления файла requirements.txt и создания YAML-файла контейнер Intel Python2 снова готов к запуску. Первая команда, которая выполняется при использовании docker-compose – сборка контейнера. Данная команда, как показано ниже, позволяет обновлять любые сервисы, если это необходимо, и создавать контейнеры. Команда должна выполняться каждый раз, когда нужно обновить сервисы, чтобы их можно было перенастроить перед использованием.
docker-compose build
После настройки всех сервисов контейнером можно пользоваться. Команда, показанная ниже, запустит все необходимые сервисы для этого проекта. Для этого конкретного примера команда запустит python_notebook.
docker-compose up
После выполнения вы получите URL-адрес для открытия текстового редактора Jupyter. Чтобы открыть его, скопируйте и вставьте ссылку в браузер. После завершения работы с приложением приведенную ниже команду можно использовать для завершения работы сервисов (должно быть запущено в другом окне терминала).
docker-compose down
Или же можно использовать комбинацию клавиш Ctrl + C для выхода.