Как стать автором
Обновить

Комментарии 37

Статья, как завернуть скрипт в образ виртуальной машины, планируется?

А может проще написать "настоящую" программу на настоящем языке? Тогда и докер не понадобится.

Какие программы являются настоящими? И какие языки?
Я как пользователя линукса довольно редко встречаю "настоящие" программы. Или линукс тоже ненастоящая ОС?

интересно, как же ты обходишься без ls, bash, cp, cd и сотни друхих шелл команд?))

Когда изредка приходится пользоваться виндой, обхожусь без них с большим неудобством :)
И сотня команд по сравнению с миллионнами всех программ это капля в море.


Чаще всего софт делают для винды/мака. А на линуксе альтернативы.


И чаще всего это вопрос не языка, а именно адаптации под ОС

совсем не понял почему ты перепрыгнул на винду и мак когда сам говрил про linux, но отвечу про «настоящие языки», очевидно те что не требуют эмулировать целую ОС, для запуска hello world в виде бинаря, в чём смысл брать скриптовый язык и пытаться создать из него бинарь не лучше ли взять для этого более подходящий компилируемый язык? к тому же для питон есть более «адекватная» реализация этого. Использовать докер контейнер только для того чтоб запихнуть 1 скрипт, это уже верх маразма…

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


Например, в подходящее окружение входят:


  • ОС
  • зависимости, например на питоновские либы или 3rd party tools (например на тот же bash)
  • таймзоны
    Докер все эти проблемы и решает.

Языки (компилируемые или нет) не могут решить эти проблемы и/или требуют чрезмерного усложнения скрипта. Компилируемые языки тут не сильно помогают.


Да, ненативная компиляция (например java/python), может увеличивать количество проблем с окружением. Но в то же время не требует создавать бинарники под каждую ОС.


Я соглашусь с вами, что докер для запуска скриптов, это чаще всего нехилый и ненужный оверхед. Но и не обязательно это делать каждый раз. Важно знать, что такой подход существует и может быть оправдан в некоторых случаях.

Из озвученного cd не является программой.
с любым человеком, у которого есть Docker.
дальше не читал ибо докера ни у кого нет
Как-то немного странно видеть докер для решения задач распостранения программ. Понятно, что если вам надо это разворачивать где-то в кластере, но другое дело если вы говорите конечным пользователям, что для работы нашего питон скрипта нужен докер… Докер имадж может быть одной из опций, но не основновным вариантом, как мне кажется.
Проблема в том, что это может быть не просто скрипт, а например сервер на Django с множеством зависимостей, причем бывает и так, что требуются конкретные версии, самые новые не подходят. И когда таких «скриптов» на компьютере несколько, их обвязка (библиотеки, БД) может мешать друг другу.
Как хорошо, что существует venv, который позволит решить эту проблему :)
А если у вас в проекте не только Python, а еще БД, задачи, выполняемые по расписанию, настройки часового пояса?

Это всего лишь две дополнительные команды (для начального заполнения БД и для запуска celery beat), никакой докер тут не требуется

Ага и тонны мануалов по установке и настройке этих БД + совместимость версий.
по установке

apt install mariadb-server занимает примерно секунд пять


и настройке этих БД

А при установке из докера всё окажется магическим образом автоматически оптимизировано конкретно под мою систему и настраивать ничего не надо, что ли?


совместимость версий

С этим проблем нет, если система не из прошлого тысячелетия

  1. Нет смысла комментить.
  2. Энвы в контейнер с базой, либо example conf в репе + описание что менять под этот проект.
  3. В МашаБД мб нет, не знаю, а вот с MySQL 5.7 vs 8 есть. Это самый простой пример. Рассказывать нам как Вы умеете ставить миллион бд чтобы они работали параллельно не надо. Это лютый гемор без контейнеров.
Энвы в контейнер с базой, либо example conf в репе + описание что менять под этот проект.

Ну то есть настраивать в любом случае придётся. В чём проблема сделать точно такой же example conf без контейнеров?


Это лютый гемор без контейнеров.

Ну вот и устанавливайте MySQL в контейнерах сколько вам угодно, я не против. А python-проекты в контейнер пихать зачем? Все основные питоновые ORM поддерживают широкий набор СУБД от MySQL 5.7 до MariaDB 10.5, плюс прочие постгресы и sqlite3. Если не использовать заведомо несовместимые фичи, специфичные для конкретной СУБД, то проблем с совместимостью не будет.

Вам — не зачем) а мне — для спокойствия, порядка и чистоты.

Для спокойствия, порядка и чистоты я избегаю использования контейнеров ¯\_(ツ)_/¯

добро пожаловать в долбаную реальность, везде и всюду вендорский софт в докере, дак еще и в venv… так как библиотеки которые использовали протухли еще за пару лет до релиза первой беты.."
Запускаю торрент-клиент в докере, очень нравится.
Что-то начинает напрягать реклама в которой ещё есть и hello-world статья.

Пора и мне на хабре написать:
Название: Основы программирования за 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 такому "правильному и настоящему" запуску приложений

Пользователи Windows смотрят в сторону PY2EXE и недоумевают, зачем вот это вот всё.
Согласен, управление окружениями в питоне хуже некуда (но хотя бы лучше nodejs).
Но всё-таки компилировать программу лучше на сборочном сервере/контейнере, чем поставлять эти контейнеры с аж целым докером.
Извините, если покажется рекламой (не реклама, личный опыт), но всё-таки про докер — посоветую курс на kodekloud: Docker for the Absolute Beginner — Hands On
Там на английском, но вполне понятно, есть субтитры, кто голос плохо воспринимает (как я). И этот курс бесплатен (в отличие от множества остальных на том сайте).
А можно не писать раз в месяц статью на хабр как засунуть в докер helloworld?
Рискую нахватать минусов, но таки скажу.
Что только люди не делают, лишь бы на баше не писать.
Пример из статьи решается при помощи «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. Во сколько я это затолкаю в контейнер даже проверять нет желания.

Единственная причина, почему автор вот это вот всё сделал, могу предположить, чтобы сделать демку, как докер работает.
а в один бинарник через cpython нельзя всё это запихать, вместе с этими requirements.txt?

на хабре про упаковку питона в докер написано уже сто тыщ мильенов раз. интереснее было бы почитать про упаковку в snap, flatpack, цельный бинарник и другие форматы, ориентированные на конечного пользователя, а не разраба

Docker, в принципе, замечательная штука, но за пять лет зависимости внутри образа успевают протухнуть, в результате чего приходится разруливать зависимости и пытаться добавить внутрь Dockerfile ключи для репозиториев с истекшим сроком поддержки.

Напишите статью про то, как упаковать в Докер-контейнер sh-скрипт. Очень надо. Это то, чего не хватает сообществу и миру.
Спасибо.
Хорошая статья, спасибо
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.