Покажем, как использовать 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 для выхода.

Оригинал

Материалы по теме:

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

matyushkin
07 апреля 2020

ТОП-15 книг по Python: от новичка до профессионала

Книги по Python (и связанным с ним специальным темам) на русском языке. Рас...
admin
14 июля 2017

Пишем свою нейросеть: пошаговое руководство

Отличный гайд про нейросеть от теории к практике. Вы узнаете из каких элеме...