Найти в Дзене
Computer Pro

Про Docker. Создание образа и развертывание его на хостинге timeweb.

Я не буду описывать что это за инструмент и для чего он служит. Просто попытаюсь пройти путь: от установки docker, до деплой контейнера на сервере.

Это сейчас я могу открыть консоль моего компьютера, зайти на свой хостинг "timeweb", и там запустить docker-контейнер с простейшим приложением, написанным на flask. Чтобы его могли все увидеть:

к слову, данное приложение написано не мной, это учебный материал, предоставленный образовательной платформой
к слову, данное приложение написано не мной, это учебный материал, предоставленный образовательной платформой

Но прежде чем я смог это сделать, пришлось пройти немалый путь по изучению docker'a. И это только азы (минимальный набор) этого инструмента.

Итак, первое, я работаю в операционной системе Manjaro Linux:

-2

Все действия, что будут описаны далее в статье, будут именно для Manjaro (она же Arch) Linux. Если у кого-то другой дистрибутив Линукса, делайте поправки под свою систему.

Изначально я выбрал неверную тактику, пошел так сказать "дальней дорогой" - через официальный сайт docker. Стал устанавливать программное обеспечение по тем "лекалам" что описаны на сайте. Я это описывал еще полгода назад, когда изучал Django:

А надо было сделать проще:

sudo pacman -S doker

Как оказалось огромное (1.7 Гб) приложение Docker-Desktop не очень то и нужно для Linux систем, здесь вполне достаточно консольной версии, чтобы выполнить все интересующие нас действия.

Чтобы эксперимент был более полным, я его выполню на ноутбуке, на котором стоит Manjaro Linux, но не стоит docker.

как можно видеть - докера в системе пока нет...
как можно видеть - докера в системе пока нет...

Последний раз я им пользовался летом, в отпуске, с тех пор он у меня лежал без дела и многие пакеты приложений устарели, поэтому начнем с обновления системы:

sudo pacman -Syu

Установим докер:

-4

Проверим теперь наличие докера в системе:

-5

Как можно видеть, докер присутствует, но демон не запущен, пытаюсь его запустить, программа просит пароль пользователя с правами sudo:

-6

Но к сожалению, вход не выполнен, ошибка:

-7

Как оказалось, нужно было просто перезагрузить ноутбук. После чего повторный запуск демона прошел удачно.

На этот раз демон запущен без ошибок
На этот раз демон запущен без ошибок

Необходимо выполнить процедуру аутентификации на докер_хабе. Пока это нужно делать при помощи sudo.

Такой вариант аутентификации мне нравится больше, потому как я вижу что я ввожу в качестве пароля. О чём, правда, меня предупреждает WARNING, мол это не безопасно. О безопасности я сейчас думаю в последнюю очередь, я ж не пытаюсь развернуть какую-то важную систему! Это просто тест!
Такой вариант аутентификации мне нравится больше, потому как я вижу что я ввожу в качестве пароля. О чём, правда, меня предупреждает WARNING, мол это не безопасно. О безопасности я сейчас думаю в последнюю очередь, я ж не пытаюсь развернуть какую-то важную систему! Это просто тест!

Само собой нужно пройти регистрацию и авторизацию на сайте докер_хаб. Особо сложного тут ничего нет, но на всякий случай я заскриншотил процедуру регистрации:

-10
Какие нужно заполнить поля. Пароль сгенерирован браузером.
Какие нужно заполнить поля. Пароль сгенерирован браузером.
-12
открываем свою электронную почту и подтверждаем регистрацию.
открываем свою электронную почту и подтверждаем регистрацию.

Создаю новый репозиторий, в котором будут храниться задания от SkillBox, так его и назову:

-14

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

docker logout

И попытался войти вновь, но выскочила ошибка - в пароле был разделительный символ "точка с запятой". Лечится это просто - заключаем пароль в кавычки (я попробовал одинарные, и получилось):

-15

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

-16

Для начала попробую его запустить по всем правилам на своем ноутбуке, без всяких докер-контейнеров и прочего. Что из этого получится?!

В терминале, открываю директорию "new_year_application" и создаю виртуальное окружение, активирую его, устанавливаю необходимые зависимости из файла requirements.txt

-17

Пробую запустить flask-приложение, работает:

-18

Теперь дело за созданием Dockerfile, он у меня уже подготовлен и выглядит вот так:

-19

Попробую объяснить как это работает, потому как у меня первая строка вызвала бурю непонимания, так как в роликах skillbox там было test_app, ну я по аналогии что только там не попробовал прописать, и свое приложение new_year, и названия своих репозиториев и только когда понял что я делаю что-то не так решил уточнить что же точно должно быть в первой строке. Там помещаются образы linux подобных систем, сконфигурированных и загруженных с докер_хаба. Даже если она называется просто python, там тоже будет кусочек линукса с пайтоном внутри. Я попробовал python без указания версий и обалдел от размера полученного мной image:

Не, такое ни куда не годится, удаляю, кстати - команда для удаления образа подсвечена...
Не, такое ни куда не годится, удаляю, кстати - команда для удаления образа подсвечена...

В общем указал версию как в ролике по созданию докер-образа и у меня всё получилось довольно таки красиво, образ в 10 раз меньше (но и то мне кажется многовато...)

-21
-22

Все строчки Dockerfile довольно таки понятны? кроме ADD templates.tar.gz /new_year/ и ADD static.tar.gz /new_year/ чтобы скопировать в докер-образ директории с файлами приходится их вот таким образом туда помещать. Сначала делаются архивы двух директорий templates и static:

скриншот из истории команд, как создаются архивы
скриншот из истории команд, как создаются архивы

А затем уже с помощью команды ADD помещаются в образ, где они автоматически разархивируются.

Если с первого раза образ создан не правильно, что-то пошло не так то чтобы переписать все файлы заново нужно убрать команду создания директории из Dockerfile RUN mkdir /new_year. Иначе будет ошибка, мол такой каталог уже есть...

Ну и собственно сам файл app.py. В нём нужно указать адрес хоста и порт в последней строчке.

-24

Ну собственно и всё, образ создан, можно попробовать его запустить:

-25
-26

Образ запустился и работает. Осталось дело за малым - отправить этот образ на докер_хаб, а затем установив docker на нашем timeweb хостинге - скачать образ с докер_хаба и запустить. Вроде бы не очень сложно, но мне понадобилось несколько дней чтобы в этом разобраться.

Заливаем на докер_хаб:

-27

Вот образ появился на докер_хабе:

-28

Теперь входим по нашим учетным данным через ssh в терминал сервера на хостинге timeweb, на моем ноутбуке не созданы ключи ssh, поэтому я их создаю:

... и вхожу в систему:

-29

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

-30
-31

Ну вот, теперь можно запустить докер образ на хостинге timeweb, откуда он будет работать для всех желающих:

-32

Ну и собственно, результат работы в браузере:

-33

Ну вот, работа выполнена. Надеюсь данное описание окажется полезным не только мне...

Только что прилетело сообщение:

-34

Ну а на этом всё. В статье могут быть неточности, комментируйте, ставьте лайки (это для рекомендательных систем, и меня - что люди читают), ну и подписку приветствую!