Comments 40
Статья, как завернуть скрипт в образ виртуальной машины, планируется?
А может проще написать "настоящую" программу на настоящем языке? Тогда и докер не понадобится.
Какие программы являются настоящими? И какие языки?
Я как пользователя линукса довольно редко встречаю "настоящие" программы. Или линукс тоже ненастоящая ОС?
Когда изредка приходится пользоваться виндой, обхожусь без них с большим неудобством :)
И сотня команд по сравнению с миллионнами всех программ это капля в море.
Чаще всего софт делают для винды/мака. А на линуксе альтернативы.
И чаще всего это вопрос не языка, а именно адаптации под ОС
Запуск скрипта/программы требует подходящего окружения, иначе толку с него, если он запускается только у вас.
Например, в подходящее окружение входят:
- ОС
- зависимости, например на питоновские либы или 3rd party tools (например на тот же bash)
- таймзоны
Докер все эти проблемы и решает.
Языки (компилируемые или нет) не могут решить эти проблемы и/или требуют чрезмерного усложнения скрипта. Компилируемые языки тут не сильно помогают.
Да, ненативная компиляция (например java/python), может увеличивать количество проблем с окружением. Но в то же время не требует создавать бинарники под каждую ОС.
Я соглашусь с вами, что докер для запуска скриптов, это чаще всего нехилый и ненужный оверхед. Но и не обязательно это делать каждый раз. Важно знать, что такой подход существует и может быть оправдан в некоторых случаях.
с любым человеком, у которого есть Docker.дальше не читал ибо докера ни у кого нет
Это всего лишь две дополнительные команды (для начального заполнения БД и для запуска celery beat), никакой докер тут не требуется
по установке
apt install mariadb-server занимает примерно секунд пять
и настройке этих БД
А при установке из докера всё окажется магическим образом автоматически оптимизировано конкретно под мою систему и настраивать ничего не надо, что ли?
совместимость версий
С этим проблем нет, если система не из прошлого тысячелетия
- Нет смысла комментить.
- Энвы в контейнер с базой, либо example conf в репе + описание что менять под этот проект.
- В МашаБД мб нет, не знаю, а вот с MySQL 5.7 vs 8 есть. Это самый простой пример. Рассказывать нам как Вы умеете ставить миллион бд чтобы они работали параллельно не надо. Это лютый гемор без контейнеров.
Энвы в контейнер с базой, либо example conf в репе + описание что менять под этот проект.
Ну то есть настраивать в любом случае придётся. В чём проблема сделать точно такой же example conf без контейнеров?
Это лютый гемор без контейнеров.
Ну вот и устанавливайте MySQL в контейнерах сколько вам угодно, я не против. А python-проекты в контейнер пихать зачем? Все основные питоновые ORM поддерживают широкий набор СУБД от MySQL 5.7 до MariaDB 10.5, плюс прочие постгресы и sqlite3. Если не использовать заведомо несовместимые фичи, специфичные для конкретной СУБД, то проблем с совместимостью не будет.
Пора и мне на хабре написать:
Название: Основы программирования за 5 минут
Текст:
Давайте выведем 2+2:
echo "2+2 = 4"
Ну вот, мы научились. Да, тут есть что улучшить, но купите наши вазелиновые шарики всего за 9.99. первым 100 000 покупателей скидка 2 копейки.
Для таких вещей люди придумал PyInstaller для Windows и Mac, который справляется на 100% со своей задачей, и AppImage для Linux.
Добавлю пять копеек. Есть мультиплатформеная conda/anaconda
conda -n "хелворд" -python=какая версия нужна conda-pack
Conda activate хелворд
Пишем, что хотим, после conda-pack получаем tarball.gz со всеми установленными зависимостями. На целевой машине достаточно поставить конду батником и распаковать архив 7zip или нативно в линуксе
Не будут рады пользователи Winsows такому "правильному и настоящему" запуску приложений
Но всё-таки компилировать программу лучше на сборочном сервере/контейнере, чем поставлять эти контейнеры с аж целым докером.
Там на английском, но вполне понятно, есть субтитры, кто голос плохо воспринимает (как я). И этот курс бесплатен (в отличие от множества остальных на том сайте).
Что только люди не делают, лишь бы на баше не писать.
Пример из статьи решается при помощи «apt install inotify-tools» и скриптом на баше примерно такого же размера как скрипт на питоне из статьи, а то и меньше.
Образ докера из статьи 114 Mb. Плюс докер, чтобы эти 114Mb запускать.
Пакет inotify-tools:
Пол:1 http://deb.debian.org/debian bullseye/main amd64 libinotifytools0 amd64 3.14-8.1 [18.9 kB]
Пол:2 http://deb.debian.org/debian bullseye/main amd64 inotify-tools amd64 3.14-8.1 [25.9 kB]
44.8 Kb, В распакованном виде 150 Kb. Во сколько я это затолкаю в контейнер даже проверять нет желания.
Единственная причина, почему автор вот это вот всё сделал, могу предположить, чтобы сделать демку, как докер работает.
на хабре про упаковку питона в докер написано уже сто тыщ мильенов раз. интереснее было бы почитать про упаковку в snap, flatpack, цельный бинарник и другие форматы, ориентированные на конечного пользователя, а не разраба
Docker, в принципе, замечательная штука, но за пять лет зависимости внутри образа успевают протухнуть, в результате чего приходится разруливать зависимости и пытаться добавить внутрь Dockerfile ключи для репозиториев с истекшим сроком поддержки.
Спасибо.
А как делиться докенизированной программой, с любым человеком, у которого нет Докера?
Как превратить скрипт на Python в «настоящую» программу при помощи Docker