Запустить скрипт на докере

Как запустить скирипт на докере, используя Dockerfile?

Запустить файл в докере

Если Вы впервые слышите о докере и имеете лишь малое представление об этом инструменте, но у Вас есть файл с непонятными инструкциями под названием «Dockerfile», а также работающий скрипт, который нужно как можно быстрее запустить на докере, эта статья для Вас! Для начала мы немного определимся с понятиями «докер» и «образ докера», а затем — запустим скрипт на докере, предварительно создав простейший Dockerfile.

Что такое 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))

В результате работы скрипт должен вывести состав рецепта и единичную матрицу:

запустить скрипт на докере, используя Dockerfile

Затем предлагаю создать папку под названием «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
Расположение файла "Dockerfile"
Расположение файла «Dockerfile»
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

Запустить файл в докере
Запуск скрипта в docker

Итак, все готово! Жмем 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 

Добавить комментарий