George
можешь ссылку на https://habr.com/ru/post/467607/ дать
Anonymous
Коллеги, вот думаю написать небольшую статью на Хабре о том, как я вижу главный косяк docker с точки зрения любого вменяемого сисадмина. И он - в практике применения, когда разработчики считают почему-то контейнеры помойкой, в которую они имеют право упаковывать какие угодно бредовые зависимости типа библиотечки, умершей ещё в 2011-м году. Эти зависимости там рано или поздно протухают, у разных контейнеров с примерно одними и теми же зависимостями - разные их версии, потому что разработчики свято верят в то, что с библиотечкой 1.31 их софт работает, а с 2.05 - уже нет, и это никак не исправить (потому что лень). Всё это легко можно исправить и делать вещи правильным образом. Но в реальной практике почти никто не делает так, и контейнеры превращаются в рассадник, где на 20% обновляемого актуального кода от разработчиков и 80% - непонятно откуда надёрганного никогда уже и никем не обновляемого кода от Васи Пупкина с гитхаба. Что думаете об этом? Может быть, моё видение ситуации слишком мрачное и в действительности проблема упаковки гниющих в контейнерах зависимостей успешно решается?
Так не в контейнерах же дело, а в проектах. Вон у нас без всяких контейнеров три проекта на laravel 5.5 - Release August 30, 2017, EOL August 30, 2020 - думаешь контейнеры что-то поменяют? И не в лени дело - задачи на обновление висят, но очередь до них не доходит
Anonymous
Для бизнеса подобные задачи не в приоритете
Ганц
https://habr.com/ru/sandbox/156808/
Ганц
Тяжело у меня с краткостью, надо было текст выше вставить и этим ограничиться
Evgeniy
Коллеги, вот думаю написать небольшую статью на Хабре о том, как я вижу главный косяк docker с точки зрения любого вменяемого сисадмина. И он - в практике применения, когда разработчики считают почему-то контейнеры помойкой, в которую они имеют право упаковывать какие угодно бредовые зависимости типа библиотечки, умершей ещё в 2011-м году. Эти зависимости там рано или поздно протухают, у разных контейнеров с примерно одними и теми же зависимостями - разные их версии, потому что разработчики свято верят в то, что с библиотечкой 1.31 их софт работает, а с 2.05 - уже нет, и это никак не исправить (потому что лень). Всё это легко можно исправить и делать вещи правильным образом. Но в реальной практике почти никто не делает так, и контейнеры превращаются в рассадник, где на 20% обновляемого актуального кода от разработчиков и 80% - непонятно откуда надёрганного никогда уже и никем не обновляемого кода от Васи Пупкина с гитхаба. Что думаете об этом? Может быть, моё видение ситуации слишком мрачное и в действительности проблема упаковки гниющих в контейнерах зависимостей успешно решается?
все это не "косяки" докер а проблемы конкретных личностей, что микроскопом гвозди забивают и жалуются что неудобный микроскоп для забивания гвоздей
Evgenii Andreev
Коллеги добрый день, подскажите плз. Нужен имейдж Кафки для arm(m1) желательно чтобы коннекторы из коробки были. Гугл ничего дельного не сказал, может кто то свой образ собирал?
Ганц
все это не "косяки" докер а проблемы конкретных личностей, что микроскопом гвозди забивают и жалуются что неудобный микроскоп для забивания гвоздей
Не спорю. Но жизнь такая какая есть и разработчики склонны использовать docker не как прогрессивную вещь, а как такой способ запихать всё дерьмо в бутылку, чтобы оно там бродило и через пробку не воняло
Deleted
Коллеги добрый день, подскажите плз. Нужен имейдж Кафки для arm(m1) желательно чтобы коннекторы из коробки были. Гугл ничего дельного не сказал, может кто то свой образ собирал?
этот мусор неработоспособен, лучше заведите девсерв на привычном x86 и платите за него по 10$ в месяц, эти 10$ окупятся временем, затраченным на секс с m1
Deleted
как и зачем вообще можно было такое сделать - непонятно
Evgeniy
поэтому как я выше написал это не проблемы докера это проблемы людей что его используют таким образом это мое личное мнение
Deleted
когда докер был не так популярен использовали обычные vm и все паковали туда это лучше чем не иметь нужные зависимости.
странно, кстати, что было именно так. я те времена не застал так что сказать ничего не могу оверхед при таком подходе рос сильно быстрее чем линейно всегда был chroot, задолго до джейлов бсдшных, на нём тоже можно реализовать решение задачи изоляции зависимостей
Ганц
Исходно в OpenOffice.org'е писал
Ганц
когда докер был не так популярен использовали обычные vm и все паковали туда это лучше чем не иметь нужные зависимости.
Вопрос (я не стал уже его освещать, иначе статью бы до нездоровых размеров раздуло) ещё в том, что традиционные unix-системы построены на идеологии разделяемого кода, это их краеугольный камень и во многом именно то, что обеспечило их популярность и на серверах, и в среде разработчиков. Сейчас же docker по сути является вещью, провоцирующей использовать подход как в экосистеме windows, когда каждое приложение таскает почти все нужные ему библиотеки с собой. Безусловно, всё это легко разруливается слоями, регулярным обновлением базовых слоёв, максимальным использованием одних и тех же слоёв в разных приложениях, но... если этого можно не делать, ни с кем не договариваться, ничего не настраивать, а просто пихать в свой пакет всё, что удобно данной конкретной команде разработчиков - так чего ж не запихать, кто помешает-то?
George
помешает
George
безопасность, например
George
или бизнес - который понимает риски )
Evgeniy
Вопрос (я не стал уже его освещать, иначе статью бы до нездоровых размеров раздуло) ещё в том, что традиционные unix-системы построены на идеологии разделяемого кода, это их краеугольный камень и во многом именно то, что обеспечило их популярность и на серверах, и в среде разработчиков. Сейчас же docker по сути является вещью, провоцирующей использовать подход как в экосистеме windows, когда каждое приложение таскает почти все нужные ему библиотеки с собой. Безусловно, всё это легко разруливается слоями, регулярным обновлением базовых слоёв, максимальным использованием одних и тех же слоёв в разных приложениях, но... если этого можно не делать, ни с кем не договариваться, ничего не настраивать, а просто пихать в свой пакет всё, что удобно данной конкретной команде разработчиков - так чего ж не запихать, кто помешает-то?
а что мешает пакету притащить свои бинарники и размазать их в хостовой системе ? софт от hp для сканера или принтера никогда не ставили на "Linux" там он такое тащит и все это в хостовую систему я бы предпочел чтобы это все лежало в контейнере и если решил удалить то удалил бы все я прекрасно понимаю цену всего этого, на тему разделяемых либ и прочего есть хорошая статья на хабре про трагедию общин
Anonymous
поэтому как я выше написал это не проблемы докера это проблемы людей что его используют таким образом это мое личное мнение
Да это к докеру отношения вообще мало имеет. Как писали софт, так и пишут. Хорошо если логи на stdout переделали
Andrey
Коллеги, вот думаю написать небольшую статью на Хабре о том, как я вижу главный косяк docker с точки зрения любого вменяемого сисадмина. И он - в практике применения, когда разработчики считают почему-то контейнеры помойкой, в которую они имеют право упаковывать какие угодно бредовые зависимости типа библиотечки, умершей ещё в 2011-м году. Эти зависимости там рано или поздно протухают, у разных контейнеров с примерно одними и теми же зависимостями - разные их версии, потому что разработчики свято верят в то, что с библиотечкой 1.31 их софт работает, а с 2.05 - уже нет, и это никак не исправить (потому что лень). Всё это легко можно исправить и делать вещи правильным образом. Но в реальной практике почти никто не делает так, и контейнеры превращаются в рассадник, где на 20% обновляемого актуального кода от разработчиков и 80% - непонятно откуда надёрганного никогда уже и никем не обновляемого кода от Васи Пупкина с гитхаба. Что думаете об этом? Может быть, моё видение ситуации слишком мрачное и в действительности проблема упаковки гниющих в контейнерах зависимостей успешно решается?
Ты так считаешь, видимо, потому не пишешь часто код. Примитивно, часто по времени разраба(а время это деньги) проще тащить именно нужную версию либы пакета, чем править кучу мест и вылавливать баги с новой либой или пакетом
Ганц
Ты так считаешь, видимо, потому не пишешь часто код. Примитивно, часто по времени разраба(а время это деньги) проще тащить именно нужную версию либы пакета, чем править кучу мест и вылавливать баги с новой либой или пакетом
Если это систематическая работа, а она должна быть систематической, то и не нужно будет править кучу мест и тратить много времени. К тому же, время разраба - это не то, чем он сам распоряжается и сам себе решает, что ему делать, а что нет. Это вопрос того, какие задания будут поставлены разрабу его руководителями (начиная тим-лидом и выше). Если руководители вменяемы, то они предусмотрят время на адаптацию к изменениям в экосистеме, если нет - у них будет Java 1.5, бережно хранимая в запасниках и библиотеки из 2008-го года. Я с таким сталкивался, но подобные вещи нельзя назвать иначе как разработкой по методологии "после нас хоть потоп"
Andrey
Если это систематическая работа, а она должна быть систематической, то и не нужно будет править кучу мест и тратить много времени. К тому же, время разраба - это не то, чем он сам распоряжается и сам себе решает, что ему делать, а что нет. Это вопрос того, какие задания будут поставлены разрабу его руководителями (начиная тим-лидом и выше). Если руководители вменяемы, то они предусмотрят время на адаптацию к изменениям в экосистеме, если нет - у них будет Java 1.5, бережно хранимая в запасниках и библиотеки из 2008-го года. Я с таким сталкивался, но подобные вещи нельзя назвать иначе как разработкой по методологии "после нас хоть потоп"
Это все очень хорошо и правильно звучит(согласен) и (но) всё это из мира с розовыми пони и единорогами. Зачастую так и делает, но часто и факту, никто не будет переписывать или адаптировать систему. У меня есть кусок кода который использует из библиотеки, которой лет 5 и она не обновляется, 3 функции, они используются, 1 раз в 2 месяца. Переписать их под текущие реалии - нереально, поэтому я тащу эти библиотеки(верней они в базовом образе) с набором старого дерьма дальше. Нового ничего нет такого, писать самому - зачем. Примерно так.
Andrey
Причём, в чем практическая проблема всякого такого разного в докере, безопасность- да, а ещё? Кроме мнения, что это «помойка некрасивая»
Ганц
Причём, в чем практическая проблема всякого такого разного в докере, безопасность- да, а ещё? Кроме мнения, что это «помойка некрасивая»
Я в статье немного написал об этом. Например, заменить Вас программистом со стороны с ходу будет проблематично, если там на древнем говне построена экосистема. Во-первых - как найти документацию по этим артефактам? Во-вторых - Вы сами-то любите возиться с лютым легаси, которое непонятно откуда взялось и непонятно что даст вам для опыта/резюме? Ну и, я об этом тоже упомянул, новые версии языка со старыми либами могут быть банально несовместимыми. Скомпилированные Java-классы из 2008-го не работают на современной JRE в 2021-м
Ганц
Опять же, почему код должен быть вылизанным и совершенным, а его экосистема может быть лютым легаси-говном? Это не лоогично. Тут либо всё такое, либо и код должен быть современным, и экосистема его тоже. Это я за честиолюбие и самоуважение разработчика к себе как к профессионалу. Мне кажется, без этого мало кто удержится в такой специфической профессии
Andrey
Я в статье немного написал об этом. Например, заменить Вас программистом со стороны с ходу будет проблематично, если там на древнем говне построена экосистема. Во-первых - как найти документацию по этим артефактам? Во-вторых - Вы сами-то любите возиться с лютым легаси, которое непонятно откуда взялось и непонятно что даст вам для опыта/резюме? Ну и, я об этом тоже упомянул, новые версии языка со старыми либами могут быть банально несовместимыми. Скомпилированные Java-классы из 2008-го не работают на современной JRE в 2021-м
Да при чем тут резюме, java. Аргумента кроме «красиво» - или «помойка». Если код работает, продукт или сервис реализуется, удовлетворяет бизнес интересам, интересам потребителей, продаётся в конце концов, и руководство понимает, как это будет развиваться. То лишние либы или пакеты в докере - это самое последнее о чем думают. Это все сверх идеализм, ничего общего не имеющий с реальностью. Более такой подход, на самом деле - вредный для «дела».
Andrey
Я видел кучу успешных проектов, в бэкэнде за шторой - такие лютые костыли и «гавно код». Со временем с развитием от этих костылей, потихоньку избавляются, но это не приоритет. И не был им никогда.
Andrey
Приоритет быстро и качественно доставить услуги и продукт.
Ганц
Я видел кучу успешных проектов, в бэкэнде за шторой - такие лютые костыли и «гавно код». Со временем с развитием от этих костылей, потихоньку избавляются, но это не приоритет. И не был им никогда.
Да, но зачем тогда делать, например, рефакторинг, код-ревью всякие. Там и без этого будет всё более-менее, регрессии выловят как максимум функциональные тесты
Ганц
Можно сразу тогда писать говно-код, это даже быстрее будет
Ганц
Непонятно конечно, где искать разработчиков под Java 1.5 или Go 0.6, но почему бы и нет - страна большая, кто-нибудь вспомнит
Andrey
Да, но зачем тогда делать, например, рефакторинг, код-ревью всякие. Там и без этого будет всё более-менее, регрессии выловят как максимум функциональные тесты
Не надо ситуацию доводить до абсурда, равно как и вылизывать код, который уже после завтра не понадобится
Ганц
Andrey
А что за странные заказчики, которым нужен код, но не нужна поддержка?
Заказчикам нужен продукт или сервис, которым им приносит пользу, а как он там работает их вообще не парит
Deeplerg
могу ли я как-то сказать докеру, чтобы при docker stack deploy он не останавливал уже существующие сервисы? docs.docker.com/compose/compose-file/compose-file-v3/#update_config есть stop-first, есть start-first, но не вижу опции, чтобы не останавливать сервисы вообще
Deeplerg
Предположу что раз нет в доке, то не сможешь сделать. А зачем вам вообще такое?
нельзя допустить, чтобы серверы останавливались просто потому, что пришло обновление, на них будут активные игроки. Просто отправлю внутренний api-запрос, который в конце концов скажет этим самым серверам перестать принимать новых игроков и дождаться завершения текущих матчей перед остановкой.
Deeplerg
нет, они не stateless
Deeplerg
нельзя попросту перенаправить трафик на другой сервер
Deeplerg
просто учить k8s потому, что docker не может не останавливать сервисы, вариант так себе :P
Vitaliy
Когда нашим разрабам надо было переехать из редиса в реббит, и тоже чтобы редис работал пока в нем есть задания, я предложил (да, был занят, поэтому возможно бред) поднять новые аппы смотрящие в реббит параллельно существующим, а уже потом , когда придёт время, погасить старые версии.
Vitaliy
Как именно они вышли из положения, точнее что мы им ещё за варианты предложили, я увы пока не знаю.
Gleb
нельзя допустить, чтобы серверы останавливались просто потому, что пришло обновление, на них будут активные игроки. Просто отправлю внутренний api-запрос, который в конце концов скажет этим самым серверам перестать принимать новых игроков и дождаться завершения текущих матчей перед остановкой.
А зачем так делать если нельзя? В этом рассказе либо чего то не хватает либо ошибка в логике. Или это все руками делается? Какой-нибудь пресловутый gitlab ci решит вашу не существующую проблему - вопрос настройки пара часов от силы
Andrei
Сорян ребята, может вопрос туповат. Есть софт по линь для управления докерами? чет консоль в данном процессе мне не очень вкатывает
Deeplerg
А зачем так делать если нельзя? В этом рассказе либо чего то не хватает либо ошибка в логике. Или это все руками делается? Какой-нибудь пресловутый gitlab ci решит вашу не существующую проблему - вопрос настройки пара часов от силы
Несуществующую проблему? Правда? :) На серверах находятся активные игроки, просто так кикнуть их нельзя. Сервера - stateful, поэтому просто перенаправить трафик нельзя. Единственное решение: через апи сказать старым серверам перестать принимать новых игроков, дождаться, пока старые закончат свои матчи и выключиться, параллельно запуская новые сервера для новых игроков. Кажется, несуществующую проблему решить пытаетесь именно Вы :)
Deeplerg
Это решается на балансировщике трафика, если он вообще у вас есть
Как это можно решить с балансировщиком? Я же указал несколько раз: попросту перенаправить трафик нельзя, состояние игрока привязано к конкретному серверу
George
Как это можно решить с балансировщиком? Я же указал несколько раз: попросту перенаправить трафик нельзя, состояние игрока привязано к конкретному серверу
балансировщик может кидать новые коннекты на новые сервера, а старые держать к старым ) и давать статистику по состоянию
George
но налицо проблемы с архитектурой приложения
Deeplerg
Кажется, подстраивать архитектуру под деплой не самая лучшая идея. Я почему-то думал, что должно быть наоборот :)
Evgeniy
правильно, докер тут не очень хорошее решение если сервисы statefull но даже тут есть решение (по поводу gracefull shutdown контейнера https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/ нужно лишь научить игровые сервера научить слушать сигналы, чтобы они умели завершаться (с большим таймаутом где то в настройках его задвать) и балансировщику не слать новых игроков туда, костыли :) или еще как то ресерчить эту тему
Null
DataOps — инженер будущего, который выстраивает инфраструктуру для работы с данными. 👉🏻Если вы Data Engineer, администратор или DevOps с опытом, и хотите узнать больше об управлении данными, 15 июля OTUS приглашает на demo-занятие «Практики Data Governance»: На этом открытом уроке вы узнаете: - Почему обработка данных - это не только написание ETL-процедур. - Как не превратить Data Lake в Data Swamp. - Что в себя включают практики Data Governance. Занятие дает возможность предварительно попробовать новый онлайн-курс «DataOps Engineer» и познакомиться с преподавателем. 📍Для регистрации пройдите вступительный тест: https://otus.pw/sSbB/
Марат
Всем добрый день. Установил docker на windows 10. После установки запустил docker decktop
Марат
Марат
Docker не запустился. Помогите в чем может быть проблема ?
Марат
DaiTenshi
Docker не запустился. Помогите в чем может быть проблема ?
WSL2, кажется, у тебя не включен... посмотри, какие шаги по мануалу будут достаточны - после каждого пытайся запустить докер, все оголтело не надо выполнять... https://docs.microsoft.com/ru-ru/windows/wsl/install-win10#step-1---enable-the-windows-subsystem-for-linux
DaiTenshi
Попробую. Что значить оголтело ?
оголтело == бездумно, просто последовательно с 1 и по 6й... так скорее всего не понадобится - понадобится первый-второй, ну может ещё немного
Марат
wsl 2 установлен и доступен.
Джифорсович
Виндузятник пытается запустить докер...
Джифорсович
✌🏻
Приветствую всех, подскажите пожалуйста, как запустить при старте контейнера сразу два .sh скрипта?
Dan
(одна страна, один вождь)
✌🏻
А как же философия докера «один контейнер - один процесс» ?
Они являются вспомогательными для этого процесса)