From: kmeaw
Date: 2021-02-01 21:30:35Z
> Хорошо отмечено, что принципиально ничего нового docker не изобрёл,
> ведь были jail/zone уже.
Но ведь docker - не про это.
docker - это такая штука, которая решает следующие задачи:
1) унифицировать софт в одинаковые коробочки, которые можно развернуть
на любом линукс-дистрибутиве - если разработчик завернул свою программу
в docker-контейнер, то её можно более-менее одинаково запускать на
различных версиях Debian, RHEL, ArchLinux, Gentoo и так далее, примерно
как AppImage, Snap или Flatpak;
2) даёт простой способ доставлять эти коробочки с помощью
registry: docker pull registry.corp.com/my/soft - примерно как
репозитории для пакетных менеджеров;
3) предоставляет хостинг, являющийся registry по-умолчанию - примерно
как github сейчас для опенсорса;
4) подталкивает разработчика к явному выделению state из приложения,
облегчая эксплуатацию и даёт простой способ очистить окружение - отчасти
делая процедуру переустановки ОС ненужной.
Конечно же, каждое из этих свойств можно получить и без docker, и
получится даже лучше, но польза docker в том, что кто-то уже собрал его
возможности в одном месте. Можно легко установить docker и начать
пользоваться.
На мой взгляд, есть всего два сценария, когда docker стоит использовать:
1) Для знакомства с софтом во время быстрого прототипирования - можно не
разбираться, как развернуть какой-нибудь Hadoop, а взять готовые чужие
контейнеры и начать ими пользоваться. А если Hadoop так и не оказался
полезным для решения задачи, то от этих контейнеров будет так же легко
избавится. Тут пригождаются свойства 3 и 4.
2) Для предоставления вычислительных мощностей, на которых будет
выполняться всё подряд. Некоторый компромисс между образом диска VM и
пакетами. Тут же пригоджается явным образом выделенный state, так как
подобные вычислительные облака часто проектируются и используются в
предположении, что ту часть, где нет ценного состояния, можно потерять и
заново запустить в другом месте. В этом сценарии - 1, 3 и 4.
From: Sergey Matveev
Date: 2021-02-02 06:41:08Z
*** kmeaw [2021-02-02 00:23]:
>> ведь были jail/zone уже.
>Но ведь docker - не про это.
Но всё это можно было очень просто наворотить поверх jail/zone/whatever.
>Конечно же, каждое из этих свойств можно получить и без docker, и
>получится даже лучше, но польза docker в том, что кто-то уже собрал его
>возможности в одном месте. Можно легко установить docker и начать
>пользоваться.
Для меня главное -- что сделав это "нормально" (с моей точки зрения)
будет лучше.
>На мой взгляд, есть всего два сценария, когда docker стоит использовать:
>1) Для знакомства с софтом во время быстрого прототипирования
Гипотетическую пользу эту я тоже вижу.
>2) Для предоставления вычислительных мощностей, на которых будет
>выполняться всё подряд. Некоторый компромисс между образом диска VM и
>пакетами.
Плюс добавить тьму геморроя связанного с этим state и зачастую, как я
видел на практике, требующую или костылей или изменения софта.
Главная проблема Docker-а, которую я вижу -- его экосистема. В том числе
и то что вы назвали его плюсами в виде репозиториев. С Docker я всё же
был знаком и видел (да и сейчас иногда ради любопытства заглядываю в его
dockerfile) как пишут его описания сборок. Сплошное ничем не
верифицируемое скачивание бинарей с Интернета. На днях я вот делал shell
скрипт который автоматически собирает и разворачивает Go1.4, Go, и ещё
ряд Go софта -- если это git, то обязательный checkout на нужный commit.
Если это что-то скачанное fetch-ем, то обязательная сверка хэша. Я почти
не встречал dockerfile-ов которые бы хоть как-то указывали конкретные
версии, зависимости или аутентификационные данные. Регулярно появляются
новости о том, что даже официальные сборки Docker-контейнеров от крупных
компаний вовсю пестрят от тьмы необновлённого софта с уязвимостями.
Никто в целом не следит за актуализацией dockerfile-ов. It worked for
me -- конечная финальная стадия почти всех dockerfile-ов в публичном
доступе (как там дела внутри компаний -- возможно сильно лучше). Если я
вижу dockerfile или использование Docker, то мысль только об одном --
запускать это на своём компьютере будет самоубийством с точки зрения
безопасности. Для Docker-а, как для любого проприетарного софта, нужна
отдельная железка, ибо запускается (как правило) куча какого-то говнища,
ибо качество dockerfile-ов говорят об отношении авторов к этому.
Согласен что это нечто типа готовых виртуальных машин, просто без
некоторого overhead-а.
Docker как будто поощрает и плохое написание и ведение кода. Вместо того
чтобы стараться писать хорошую документацию по администрированию, вообще
делать удобный для администрирования, разворачивания и установке софт --
люди с Docker-ом просто скажут "just use our dockerfile". С таким же
успехом можно бы было им просто отдавать образы своих машин. Отсутствие
знаний, отсутствие архитектуры софта. Опять же, на днях вот я делал
задачу где используется для тестирования Си кода много Go программ, и в
довесок Python программы. Как-то не гоже же ведь требовать от человека
установки Python для запуска утилит по подготовке X.509 сертификатов? Я
потрачу пару часов на переписывание этих утилит (хотя вот же они --
готовы!) на Go, но чтобы человеку было бы удобно. Если бы я использовал
Docker, но у меня бы такой мысли не возникло, ибо я бы просто указал
установку Python. А если документация содержит PlantUML схемы, которые я
люблю, то в Docker ещё бы полезла Java. Кто-то скажет что Docker
сэкономил бы пару часов моей работы. А я скажу что у меня есть уважение
к окружающим и есть желание делать удобный софт. Docker образ это такой
blackbox с которым никто не будет и не захочет разбираться -- поэтому и
качество софта там, так сказать, проприетарное: тяп, ляп и готово.
Всё что я вижу и что описал -- само собой Docker тут не причём. Это
отсутствие культуры у людей. Проблема на 100% в людях пишущих
dockerfile-ы и Docker ничего тут поделать не может. Как у людей уже
сложилось мнение о PHP и всей его экосистеме как низшем языке где только
говнокодить можно, так вот и о Docker аналогично. Хотя даже я знаю, что
PHP вполне себе не плох и на нём можно достойные вещи делать. Так
получилось, что PHP используется (использовался, сейчас это уже про
JavaScript можно говорить) не лучшими программистами.
Ну отдельно у меня были и технические нарекания к нему. Слышал что
что-то стало получше, но раньше годами он совсем не дружил с IPv6.
Насколько помню, он был заточен на то, чтобы делать вообще NAT с IPv4
адресами внутри контейнера. Я вот сейчас на работе правлю некоторый Си
код чтобы я мог писать хотя бы "::1", вместо "localhost" или "127.0.0.1",
а Docker бы меня так лет на 20 назад откидывал в древний IPv4-only мир.
В общем, это holywar-ная тема. Я *ничего* хорошего в Docker вот не вижу,
но почти всё это связано с людьми которые не умеют использовать софт, у
которых нет культуры разработки. Есть люди которые готовы писать
документы в облачных Microsoft Office решениях. Ok. Мне не по пути с
ними -- я такое в здравом уме никогда не смог бы выбрать или даже
рассмотреть как вариант. Docker примерно из этой же серии. Как и systemd.