
Как запустить скрипт на докере с Dockerfile?
Если Вы впервые слышите о докере или имеете лишь малое представление об этом инструменте, но у Вас есть файл с непонятными инструкциями под названием «Dockerfile», а также работающий скрипт, который нужно как можно быстрее запустить докере, эта статья для Вас! Для начала мы немного определимся с понятиями «докер» и «образ докера», а затем запустим скрипт на докере, предварительно создав простейший Dokerfile.
Что такое docker и зачем он нужен?
Докер — это весьма мощный и эффективный инструмент, позволяющий запускать скрипты и приложения без полноценной установки необходимого для этого ПО.
Представьте, что вы написали супер-скрипт и очень хотите продемонстрировать его работу приятелю. И все бы ничего, но Ваш компьютер мирно спит дома, а сами Вы в гостях у приятеля. «Ха!Ха» — восклицаете Вы: «Я всегда с собой беру флешку со своими супер-скриптами! Поэтому легко продемонстрирую работу скрипта на приятельском ноутбуке!» Однако, чтобы это сделать, Вам потребуется установить всё необходимое для работы скрипта ПО, все библиотеки, модули и прочие элементы, без которых скрипт не запустится. А еще желательно учесть версии этих элементов, чтобы не возникло ошибок. Согласитесь, не самая простая задача… Однако с помощью докера ее можно решить буквально в 3 этапа:
- Установка докера
- Создание образа для докера (docker image)
- Запуск скрипта на докере
Мы не будем останавливаться на установке dockera. Процесс установки докера подробно описан в документации по ссылке: https://docs.docker.com/engine/install/. После того, как докер будет установлен, мы напишем небольшой Python скрипт, создадим образ для докера и запустим на основе него скрипт!
Подсказка:
Как проверить, установлен ли докер?
Чтобы проверить, установлен ли докер на вашем компьютере, необходимо в терминале (если у вас Linux) или в консоли (если Windows), ввести команду:
docker --versionЕсли внизу появится строка с версией докера, как на изображении ниже, значит, докер уже установлен на вашем компьютере:

Пример запуска скрипта в докере
1. ПОДГОТОВИМ СКРИПТ ДЛЯ ЗАПУСКА В ДОКЕРЕ
Для примера напишем простенький скрипт на python и назовем его «test.py». Скрипт будет формировать dataSeries в pandas с составом вымышленного торта и выводить его на экран. Кроме этого, на экран будет выводиться 3х-мерная единичная матрица, созданная с помощью numpy библиотеки:
import numpy as np
import pandas as pd
# создаем словарь с составом торта
recipe_list = {'яйца': '2 штуки', 'сметана': '1 стакан', 'варенье': '1 стакан', 'сода': '0.5 чайной ложки'}
# формируем dataSeries на основе словаря
recipe = pd.Series(data = recipe_list, index=['яйца','сметана','варенье','сода'])
# выводим таблицу с рецептом на экран
print(recipe.head(5))
# выводим трехмерную единичную матрицу
print(np.eye(3))
В результате работы скрипт должен вывести состав рецепта и единичную матрицу:

Затем предлагаю создать папку под названием «test-docker» и сохранить в ней наш скрипт.
2. СОЗДАЕМ ОБРАЗ ДЛЯ ДОКЕРА С ПОМОЩЬЮ DOCKERFILE!
Что такое образ докера?
Образ докера — своеобразный рецепт, по которому будет формироваться рабочая среда для вашего приложения или скрипта. Допустим, для того, чтобы рассмотренный выше скрипт «test.py» точно отработал и выдал нам ожидаемый результат нужно:
- Чтобы на операционной системе Ubuntu:
- был установлен python3,
- был установлен pip3 (он нам пригодится для установки питоновских библиотек),
- были установлены библиотеки numpy и pandas.
А теперь переведем эти требования на понятный докеру язык:
FROM ubuntu:latest RUN apt-get update && apt-get upgrade -y RUN apt-get install python3 -y RUN apt-get install python3-pip -y RUN pip3 install numpy pandas
Язык докера интуитивно понятен, однако в конце статьи будут даны более подробные разъяснения по каждой написанной команде. А сейчас предлагаю записать наш рецепт в специальный файл по имени «Dockerfile»(без расширения!). В этот файл докер подглядывает каждый раз, надеясь увидеть рецепт, по которому следует приготовить блюдо, или, говоря иными словами — создать образ. Итак, разобьем процесс создания образа докера на несколько шагов:
Для создания образа докера на основе Dockerfile, нужно:
1. Записать рецепт приготовления образа в поваренную книгу докера — Dockerfile
Для этого скопируем приведенный выше рецепт для докера во вновь созданный файл и назовем его «Dockerfile». Затем сохраним файл в папке со скриптом «products.py». Важно, чтобы имя файла с инструкциями было написано без ошибок и без расширения, т. к. без «Dockerfile» докер не сможет построить образ.
# ------------- Dockerfile --------------
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y
RUN apt-get install python3 -y
RUN apt-get install python3-pip -y
RUN pip3 install numpy pandas

2. Запустить команду построения образа на основе Dockerfile
Или, другими словами, попросить докер приготовить нам блюдо по записанному рецепту. Для этого нужно в терминале (для Linux) или в консоли (для Windows):
1)Перейти в папку со скриптом , выполнив команду cd <имя папки>. В моем случае папка с файлами называется «test-docker», поэтому я выполняю команду cd test-docker:

2) Выполнить команду:
docker build -t tort .
Эта команда «говорит» докеру:
- «docker build» в переводе на русский: «докер, построй образ (ну, или приготовь-ка блюдо)»
- «-t tort» значит «по имени tort» (вы можете задать любое другое имя). «-t» -это тег, после которого следует имя образа.
- « . » — здесь указывается адрес, по которому расположен файл с инструкциями Dockerfile. Так как мы ранее с помощью команды «cd test-docker» перешли в папку «test-docker», в которой и расположен «Dokerfile», то вместо адреса мы ставим точку «.», указывающую на текущий каталог:

Затем жмем на Enter и идем пить чай! Построение образа может занять некоторое время. Будет много текста и букв, так как докер поэтапно комментирует выполнение каждой инструкции из докерфайла. Выглядеть это будет примерно так:

Когда все инструкции будут выполнены, докер сообщит об успешном завершении задачи и выведет на экран ID-номер, а также имя созданного образа:

Поздравляю! Образ успешно построен! Теперь, используя созданный образ, мы можем запустить скрипт!
3. ЗАПУСКАЕМ СКРИПТ В ДОКЕРЕ!
В качестве примера для запуска мы рассматриваем простой скрипт, который только выводит информацию на экран. Однако, результат выполнения более сложного скрипта или приложения может заключаться в изменении, удалении или, напротив, создании некоторых файлов. Поэтому, запуская скрипт или приложение с помощью докера, мы должны выдать ему разрешение на чтение и изменение содержимого папки, в которой содержится скрипт. Этот процесс называется «примонтировать директорию в докер контейнер». Контейнером при этом называют уже запущенные скрипт или приложение на основе образа докера.
То есть, как только мы выполняем команду: «запустить докер по созданному образу по имени tort с разрешением вносить изменения в указанную директорию, а также запустить питоновский скрипт по имени test.py», то наш работающий скрипт становится докер-контейнером. А теперь давайте переведем команду запуска скрипта с понятного русского на язык докера:
docker run -v /home/molodec/test-docker/:/dir tort python3 dir<em>/</em>test.py
где /home/molodec/testdocker/ — полный путь к директории со скриптом от корневой папки. Так как я работаю в Linux, то мой путь имеет вид «home/<имя юзера>/<имя папки>». В Windows путь к директории будет включать в себя не прямые, а обратные слеши, а также начинаться с имени диска.
Например: -v C:\dockers\test-docker\:/dir

Итак, все готово! Жмем Enter и наслаждаемся результатом!

Поздравлю! Результат выполнения скрипта в виде таблицы и единичной матрицы выведен на экран, а это значит, что мы успешно справились с запуском скрипта в докере по инструкциям в Dockerfile!
Обратите внимание, созданный докер-образ и запущенный контейнер питаются ресурсами Вашего компьютера, потребляя память и занимая место на диске. Поэтому, по завершению работы с контейнером и образом, рекомендуется их удалить. О том, как это сделать, читайте по ссылке Как удалить докер-образ и докер-контейнер?
Стоит отметить, что функционал докера гораздо шире, чем мы использовали в рассмотренном выше примере. Мы практически не рассматривали параметры команд докера, а также только мельком прошлись по инструкциям докерфайла. Однако, нам удалось познакомиться с базовой схемой работы докера и самостоятельно запустить скрипт, используя «Dockerfile»!
А на десерт предлагаю взглянуть на пояснения к командам, записанным в наш «Dockerfile»!

Расшифровка команд из Dockerfile!
В рассмотренном нами примере, мы создавали образ Докера на основе Dockerfile со следующими инструкциями:
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y
RUN apt-get install python3 -y
RUN apt-get install python3-pip -y
RUN pip3 install numpy pandas
1. Первая команда любого Докерфайла начинается со слова «FROM» которое означает «из, на основе чего будет построен образ». Так как в нашем случае за основу взята ОС Ubuntu последней доступной версии, то первая строка Докерфайла выглядит так:
FROM ubuntu:latest
Дословно, эта инструкция значит: «взять за основу Ubuntu последней доступной версии, или построить образ Докера на фундаменте Ubuntu последней версии».
2. Следующая строка: RUN apt-get update && apt-get upgrade -y
Команда apt-get update обновляет список доступных пакетов, а команда apt-get upgrade — устанавливает их. Так как после этих команд вместо названия пакета следует «-y», то инструкция:
RUN apt-get update && apt-get upgrade -y
извещает Докер о том, что при выполнении операций по обновлению и установке пакетов, на любой вопрос установщика мы будем отвечать «Yes».
Зачем нужен флаг «-y»?
Дело в том, что при создании образа с помощью Докерфайла, мы не имеем возможности интерактивного взаимодействия с установщиком. Это значит, что ответ, который мы попытаемся ввести с клавиатуры, не прочитается, и единственный способ сообщить установщику о своем выборе — это создать соответствующую команду в Докерфайле.
3. Инструкция RUN apt-get install python3 -y означает: «запустить установку python3 c ответом Yes на любые вопросы установщика»
4. Следующая команда запускает установку pip для python3 с флагом «-y»:
RUN apt-get install python3-pip -y
5. Заключительная инструкция командует при помощи pip3 установить питоновские библиотеки numpy и pandas:
RUN pip3 install numpy pandas