LINUX.ORG.RU

Объясните как работать с Docker

 ,


8

6

Я прочитал статьи про то зачем нужен докер, как на нём разворачивать простейшие приложения, но всё ещё не понимаю как я могу его использовать в своём проекте.

Мой стэк — Node.js/Express/TypeScript, MongoDB, RabbitMQ, nginx. Я бы вручную установил ОС, весь стэк, конфигурацию, и общую папку (чтобы не копировать файлы). При необходимости эмулировать продакшн — создал бы ещё один контейнер. Если бы у меня была macOS, то я бы использовал VirtualBox.

Но я до сих пор не понял что мне делать в Docker. Конкретно:

  • Ой. Мой список вопросов закончился :)

Отвеченные вопросы:

  • Мой главный вопрос — что мне вообще делать с вашим докером? Работать как с виртуалкой?
    • Ответ: 1
  • Мне нужно все этапы установки, которые я выполнял при ручном создании контейнера, перенести в Dockerfile/docker-compose?
  • Зачем нужен DockerHub, если можно выбрать ОС и самому установить нужный софт?
    • Ответ: нужно понимать в чём смысл докера, тогда эти вопросы отпадают. Во многих гайдах упускают тот момент, что вы не должны создать единый образ, который содержит всё, а должны все процессы поместить в отдельные контейнеры. Например, приложение на Node.js и сервер MongoDB должны быть в разных контейнерах. В Docker это называется сервисами
  • Я в некоторых Dockerfile видел apt-install — разве это уже не означает, что образ не иммутабелен? Ведь изменится версия библиотеки в репах — изменится и в твоём образе, разве нет?
    • Ответ: 1
  • Я вижу как в очередном Dockerfile пишут FROM php:alpine-666 и чуть ниже RUN apt-install .... Это значит, что используемый образ из DockerHub — Ubuntu-based?
    • Ответ: образы в DockerHub действительно базируются на какой-то ОС. Причём не всегда очевидно на какой.

Спасибо!



Последнее исправление: elonmusk (всего исправлений: 10)

Ответ на: комментарий от den73

Ну, тогда может оказаться, что докер и годится для развёртывания баз на проде. Я просто пока не разбирался, что значит это --bind, но буду иметь в виду.

Бинд значит, что «вашу маму и там, и тут показывают». Все проблемы баз на докере вызваны самим докером и решаются исключением лишнего звена. Повреждение базы плохой версией сервера не исправится докером, так что пользы от него здесь никакой нет.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Для этого собирается статически линкованный бинарный файл безо всяких докеров.

Да, в большинстве применений докера этого будет достаточно. Но не во всех. Как вы решите задачу «запустить два nginx на одной машине, каждый из них слушает порт 80,443 и ни один из них не работает от рута»? Ну и слоёная файловая система — гениальное изобретение, статически собрабнные бинарники в это не умеют.

Останутся лежать в ElasticSearch, зайдите в Kibana и проверьте.

Лишние сущности

Какое максимальное количество серверов, сервисов, нод в кластере вам доводилось обслуживать?

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Не, ну если действительно можно без потерь организовать дело так, что файлы БД, логи и всё иное, что только может понадобится, живут на настоящей файловой системе, и только исполняемые файлы и конфиги разворачиваются в докере, то это, теоретически, может иметь смысл. А само по себе изобретение работы на пустом месте имеет и свои плюсы. Если бы по сей день оставались бы лисп, пролог, смолтолк, клиппер и фокспро, доведённые до ума в плане работы в интернете, была бы дикая безработица среди программистов. Просто нужно понимать правила игры. Такое раздувание имеет место не только в ИТ, не мы его придумали и не в наших силах его исправить. Остаётся лишь следовать течению, срезая углы там, где это возможно. Тогда и совесть будет спокойна.

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 4)
Ответ на: комментарий от ugoday

запустить два nginx на одной машине, каждый из них слушает порт 80,443 и ни один из них не работает от рута

В линуксе доступ к этим портам имеет только рут. Даже в контейнере ты не сможешь запустить nginx на этих портах - придется использовать другие порты, предварительно настроив от рута проброс на 80 и 443. Слава iptables, чё.

Ну и слоёная файловая система — гениальное изобретение, статически собрабнные бинарники в это не умеют.

Слоеная файловая система решает проблемы докера, которые он сам же и создал. Как ты думаешь, почему stateless системы, грузящиеся из read-only источника, существуют уже много десятилетий, но до сих пор никому не приходило в голову запускать их из слойки? Да потому что это просто не нужно. Да, были ФС, позволявшие читать с одного устройства, а писать изменения в другое, но строить read-only пирамиды - зачем?

Какое максимальное количество серверов, сервисов, нод в кластере вам доводилось обслуживать?

Ты так боишься высказать свое мнение, что вынужден заворачивать его в вопрос?
Очень скромное лично я обслуживал, в основном обслуживали люди вокруг меня. Конечно же для больших масштабов нужны удобные инструменты управления, но что ты собрался делать с сервером, который не отвечает по ssh, но и логи от него по сети не идут? Мой коллега сталкивался с таким, например, и здесь таки выручают альтернативные способы логирования.

byko3y ★★★★
()
Ответ на: комментарий от den73

Если бы по сей день оставались бы лисп, пролог, смолтолк, клиппер и фокспро, доведённые до ума в плане работы в интернете, была бы дикая безработица среди программистов

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

Если ты хочешь апеллировать к тому, что без излишнего раздувания айти индусотехнологиями не было бы рабочих мест, то я бы тебе указал на то, откуда берутся деньги, зачем нужна работа, и почему продавец хотдогов в США зарабатывает как десяток индусов-кодеров. В свете этого я ни разу не доволен снижением уровня IT, который я вполне могу поддерживать, и, в частности, я недоволен создателями докера (коммерческий проект, несмотря на открытость сорцов), которые сбивают планку вниз, создавая низкокачественный софт и способствуя снижению качества чужого софта.
Я также недоволен снижением уровня потому, что являюсь пользователем софта и не могу создавать его весь сам.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

В линуксе доступ к этим портам имеет только рут.

Но рут в контейнере это не рут в системе. И 80-ый порт в контейнере это не 80-ый порт в системе.

Слоеная файловая система решает проблемы докера, которые он сам же и создал.

Отнюдь. Слоёная фс позволяет подготавливать базовые образы, которые потом можно уточнять в стиле:

FROM: что-то-такое:1.2.3
ADD: перламутровые пуговицы.

Это очень удобно.

Как ты думаешь, почему stateless системы, грузящиеся из read-only источника, существуют уже много десятилетий, но до сих пор никому не приходило в голову запускать их из слойки? Да потому что это просто не нужно.

Зайдём в соседнюю тему. Внезапно выясняется, что у людей паника от попытки добавить зависимость в систему. Почему?

Ты так боишься высказать свое мнение, что вынужден заворачивать его в вопрос?

Это мой квест. Я в каждом пытаюсь разглядеть что-то хорошее. Даже если человек заблуждается, наверное у него есть веские причины так думать. Скорее всего какой-то специфичный опыт, либо недостаток оного. Вот в этом направлении я и копаю.

Соответственно, «Очень скромное лично я обслуживал» и объясняет ваше непонимание зачем придумали ELK. Выяснив это, можно вместо взаимного кидания какашками конструктивно общаться в правильном направлении.

сервером, который не отвечает по ssh, но и логи от него по сети не идут?

1. Убить сервер и создать новый с помощью автоматического pipeline.

2. Завести задачу в jira на тему выяснения ситуации, что там происходило перед тем как сервер отключился.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Тот же лисп - это ЯП общего назначения, голанг тоже. Да, в CL нет горутин. Они там были, но их выпилили в угоду моде на треды. Что изменилось такого, что могло бы повлиять на популярность ЯП общего назначения?

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

Почему у США больше денег, чем у индусов - да потому же, почему кох-и-ноор до сих пор находится там же, где он находится, а не там, где он раньше находился. Но давай и об этом не будем.

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от ugoday

Но рут в контейнере это не рут в системе. И 80-ый порт в контейнере это не 80-ый порт в системе

На линуксе это одинаковые вещи. Есть вариант «setcap cap_net_bind_service=+ep», но это тоже рутовая операция и как бы при чем тут докер вообще?

Слоёная фс позволяет подготавливать базовые образы, которые потом можно уточнять в стиле...
Это очень удобно.

Очень удобно для чего? Для того, чтобы было чем заняться вместо игры в пасьянс?

Зайдём в соседнюю тему. Внезапно выясняется, что у людей паника от попытки добавить зависимость в систему. Почему?

Мне кажется, что ты ссылку перепутал.

Соответственно, «Очень скромное лично я обслуживал» и объясняет ваше непонимание зачем придумали ELK.

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

сервером, который не отвечает по ssh, но и логи от него по сети не идут?

1. Убить сервер и создать новый с помощью автоматического pipeline.
2. Завести задачу в jira

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

На линуксе это одинаковые вещи.

Нет конечно. User ID 0 в контейнере это User ID N!=0 в хосте и т.д.

и как бы при чем тут докер вообще?

При том, что докер даёт удобный интерфейс к предоставляемым ядром возможностям. А альтернативный вариант «просто собрать статически слинкованный файл» не предоставляет.

Очень удобно для чего?

Для сборки всякой сложной фигни, изоляции уровней приложения, повторного использования уже проделанной работы и т.д. Т.е. с докером вы можете сделать

1. Базовый образ

2. Из него -> образ с нужной версией явы.

3. Из него -> образ с нужной версией явы и томкэтом.

4. И него -> Рабочее приложение.

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

Мне кажется, что ты ссылку перепутал.

Ссылка верная.

я прекрасно понимаю, зачем нужны елк или сплунк,

Это замечательно. Осталось совершить над собой усилие и понять зачем нужен Докер.

И оба эти шага пока что никак не помогли в решении проблемы.

Какой проблемы? У меня всё работает. :-|

ugoday ★★★★★
()
Ответ на: комментарий от den73

Тот же лисп - это ЯП общего назначения, голанг тоже

Нет, и нет.
Лисп, как модельный язык, неплох, по его подобию было сделано много языков. Как бы фанаты не хотели, но применение Common Lisp в реальности ограничено дата-майнингом, анализом текста, экспертно-аналитических систем, то есть, специализированных систем обработки информации со сложными логическими взаимосвязями - это именно та сфера, для которой он был разработан. Та же ниша постигла и Haskell, например. Это весьма узкая ниша, потому что далеко не все веб-серверы в нее попадают, ибо сложность часто неоправдана, все целиком GUI уходят лесом, хоть лисп и используется кое-где в 3D моделировании, опять же, для работы со сложными логическими взаимосвязями, которые тяжело описать в обычных императивных языках.
Go - это вообще несерьезно. Помимо того, что к нему нет библиотек, так его уровни абстракции еще и не подходят ни для чего, кроме определенного типа нагруженных веб серверов, для которых Go и разрабатывался, собственно.

Нельзя просто так лишить людей работы и отправить их на погибель

Дык я не говорю отправлять на погибель, пусть на станках детальки точат, или двор метут, или бутылки собирают - любое общественно полезное дело, только пусть не лезут в кодинг, где они вредят. Здесь как бы опять приходим к тому, что социально-политическая система устроена так, что поощряется тот, кто приносит больше вреда обществу, и крупнейшие IT фирмы, Oracle и Microsoft, свой капитал нажили откровенным вредительством.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Как бы фанаты не хотели, но применение Common Lisp в реальности ограничено

Категоричное, безапелляционное, я бы даже сказал, отважное заявление.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Скорее, констатация сухих фактов. Common Lisp-у более 30 лет - посмотри, что на нем реально написано за это время.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Нет конечно. User ID 0 в контейнере это User ID N!=0 в хосте и т.д.

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

При том, что докер даёт удобный интерфейс к предоставляемым ядром возможностям. А альтернативный вариант «просто собрать статически слинкованный файл» не предоставляет.

«setcap cap_net_bind_service=+ep /usr/bin/programname» - что ты еще собрался упрощать и делать удобным?
Статически линкованный файл не предоставляет интерфейс к функциям ядра, потому что они оказываются просто не нужны. Ты опять решаешь выдуманные проблемы.

Мне кажется, что ты ссылку перепутал.

Ссылка верная.

Тогда я не понимаю, на что ты эту ссылку давал.

Для сборки всякой сложной фигни, изоляции уровней приложения, повторного использования уже проделанной работы и т.д. Т.е. с докером вы можете сделать
...
При этом если захочется что-то поменять, изменения будут изолированны и управляемы. А вот расскажите лучше как вы собираетесь сохранить результат наполовину сделанной работы по созданию необходимого сборочного окружения?

Прежде всего вопрос заключается в том, зачем это «необходимое сборочное окружение» нужно, причем, в больших кол-вах и разных версий. А ответ будет приводить к тому, что должна быть крупная система разработки софта, в которой докер будет одним из потенциальных инструментов, и далеко не факт, что самым эффективным. А простая жаба разных версий прекрасно запускается безо всяких докеров.

Какой проблемы? У меня всё работает.

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

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

В контейнере сможет.

«setcap cap_net_bind_service=+ep /usr/bin/programname» - что ты еще собрался упрощать и делать удобным?

мне это руками набирать или кроме исполняемого файла нужен ещё скрипт, который будет выставлять нужные переменные?

Тогда я не понимаю, на что ты эту ссылку давал.

Я спрашивал, если всё так просто, как вы об этом говорите, отчего у людей истерика от попыток добавить в проект лишнюю зависимость?

Прежде всего вопрос заключается в том, зачем это «необходимое сборочное окружение» нужно,

Ну, очевидно, чтобы чего-то собирать и использовать в дальнейшей работе. А сохранять его надо, чтобы переиспользовать единожды сделанный труд. Чтобы всегда можно было сказать «пусть у нас есть линукс с gcc X.Y.Z и musl A.B.C, добавим к этому то-то и то-то».

должна быть крупная система

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

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Скорее, констатация сухих фактов.

Вот вам ещё сухие факты: только появившись докер стал всеобщим любимцем и среди айтишников он популярен как Битлз среди хиппарей.

И ещё фактик: некоторые чемпионы, побивавшие лисп 15 лет назад, уже лежат в сырой могиле. Посмотрим, что будет ещё через 15.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

python и javascript уступают CL во всех отношениях (если мы выкинем нетехнические вещи, такие как документация и кривая обучения), тем не менее, они стали промышленными языками. CL тоже таковым по сей день является, хотя от JS он технологически уже отстал.

Если ты признаешь это на веру (всё же я профессионал в CL), то станет ясно, что выбор того или иного языка связан во многом с административными процессами.

А насчёт точить детальки и мусор убирать - там тоже станки с ЧПУ и уборочные машины справляются. Ты просто хочешь выпихнуть эту проблему из своей области, чтобы тебе её не видеть. А на самом деле, чтобы проблема безработицы не обострялась, нужно тормознуть развитие ИТ, и я вижу, что это сделано, причём так, что не объедешь :)

den73 ★★★★★
()
Ответ на: комментарий от byko3y

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

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

И он не сишечка, которая слишком много граблей в себе содержит - даже с генерацией кода нелегко с ними справиться.

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от ugoday

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

В контейнере сможет.

«setcap cap_net_bind_service=+ep /usr/bin/programname» - что ты еще собрался упрощать и делать удобным?

мне это руками набирать или кроме исполняемого файла нужен ещё скрипт, который будет выставлять нужные переменные?

Докер делает ровно то же самое. Настройка сохраняется навсегда, но дать ее должен рут и поддерживается не на всех ФС. Если бы я пользовался докером вместо линукса, то тоже, наверное, не знал бы про xattr и setcap.

Я спрашивал, если всё так просто, как вы об этом говорите, отчего у людей истерика от попыток добавить в проект лишнюю зависимость?

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

Чтобы всегда можно было сказать «пусть у нас есть линукс с gcc X.Y.Z и musl A.B.C, добавим к этому то-то и то-то»

Есть ровно единственный сценарий, в котором я вижу необходимость в таком подходе - это если нужно написать прогу и протестировать ее на большом кол-ве разнообразных сочетаний базовых компонентов (NxM), хотя, в этом случае докер не поможет с разными версиями ядра и особенностями ФС. Но если стоит задача писать для конкретных версий - докер идет лесом; если существует необходимость использовать смешанные версии для конкретно задачи - докер противопоказан.

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

Из перечисленного списка я бы назвал обязательным разве что контроль версий. Даже компилятор необязателен, потому что есть интерпретаторы.

Вот вам ещё сухие факты: только появившись докер стал всеобщим любимцем и среди айтишников он популярен как Битлз среди хиппарей.

Докер стал любимцем только со слов разработчиков докера. В реальности в докер не плевался только ленивый, он был на слуху, как «Дом 2», достигнув новых высот неюзабельности и нестабильности, или даже скорее пробив днище. Да, его доработали, теперь он не дает kernel panic и не уничтожает разделы, но факт остается такой, что разрабы на начальном этапе вкладывали больше денег в пиар своего поделия, чем на реальную разработку.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

Ну, очевидно, чтобы чего-то собирать и использовать в дальнейшей работе. А сохранять его надо, чтобы переиспользовать единожды сделанный труд.
Чтобы всегда можно было сказать «пусть у нас есть линукс с gcc X.Y.Z и musl A.B.C, добавим к этому то-то и то-то».

Разрешите вмешаться в ваш диалог.
Я пока что не очень знаком с докером, и мне действительно интересно.
Вот скажем, есть некоторая компания, занимающаяся веб-разработкой. И у многочисленных их клиентов на серверах встречаются разнообразнейшие сочетания из ОС, версий пхп, мускля, марии, нжинкса, апача, редиса, мемкеша, кролика, и т.д. и т.п.
Слушая вас, я могу предположить, что идеологически верно сделать базовый докер-образ с, скажем, пхп5.6, и заготовить некоторое количество докер-скриптов (я правильно выражаюсь?) для быстрого досовывания туда разных базы, веб-сервера, и прочего. Таким образом, у меня получится докер-образ для конкретного случая, и я уже в нем смогу тестировать что мне сейчас нужно.
Я вас правильно понял?

Borifed
()
Ответ на: комментарий от byko3y

Настройка сохраняется навсегда,

Замечательно. А теперь тоже самое для изоляции файловой системы, network namespace и перенаправлении портов в iptables, пожалуйста.

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

Смешно.

Есть ровно единственный сценарий, в котором я вижу необходимость в таком подходе

Скудость вашего воображения не проблема докера.

Докер стал любимцем только со слов разработчиков докера.

Значит вы просто не в курсе что происходит в индустрии. Бывает.

ugoday ★★★★★
()
Ответ на: комментарий от den73

python и javascript уступают CL во всех отношениях (...), тем не менее, они стали промышленными языками

Ну JS - это вообще несерьезно, тут как бы говорить не о чем.
Питон довольно сильно похож на CL, исходя из того, что я знаю. Оба динамические, оба функциональные, в обоих есть ленивые вычисления и замыкания. Фундаментальная разница заключается главным образом в макросах лиспа, которые делали из одного языка другой, а потом третий, четвертый, и в итоге финальный язык был не похож ни на исходный, ни на языки, на которых писали другие программисты. Это не только создает проблему повторного использования кода, для индустрии это серьезная катастрофа - другой программист не может понять, что написал первый программист.
Причем, система макросов сделана настолько топорно, что ломает структуру S-выражений, и с разрастанием макросов возникает проблема их совмещения, иначе у твоего DSL будет «шизофрения» и его поведение будет плохо предсказуемо. В Ракете попытались собрать разбредающихся программистов, создав более осмысленный язык шаблонов, но почему-то не взлетело. Грубо говоря, макросы лиспа - это C, а макросы ракеты - это хаскель. По всей видимости, у языков появились просто эффективные типы данных, из-за чего острая необходимость в макросах отпала, и большую часть задач можно решить без развращения кодеров макросами. В питоне есть возможность явного оперирования AST
https://docs.python.org/3/library/ast.html
для скучающих по лиспу, но ее используют нечасто. Библиотека для создания «прозрачных» шаблонов загнивает тут:
https://github.com/lihaoyi/macropy.
Да, шаблоны C и макросы лиспа по функциям мощнее, AST питона позволяет получить сравнимые возможности, но как этот код потом читать, как его отлаживать? Потому-то большинство задач все-таки решается при помощи функций-черных ящиков.

Если ты признаешь это на веру (всё же я профессионал в CL)

Не признаю.

там тоже станки с ЧПУ и уборочные машины справляются. Ты просто хочешь выпихнуть эту проблему из своей области, чтобы тебе её не видеть. А на самом деле, чтобы проблема безработицы не обострялась, нужно тормознуть развитие ИТ

Не нужны ни ЧПУ, ни IT для того, чтобы одеть, обудь, накормить, развлечь людей и дать им жилье. На текущий момент наиболее остро стоит проблема рынков сбыта: станки есть, товар производится в избытке и может производиться еще больше, но покупать его никто не будет.
Грубо говоря, для меня ситуацию в IT можно отобразить на ситуацию в литературе, где идет происходит переход к Донцовой, Толкиену, и Гарри Поттеру, скатывая вниз индустрию. Сейчас для литературы норма - когда после хорошей книжки уважаемого автор нанимается за еду бездарный графоман, который пишет кал в похожем на оригинал стиле, и этот результат творчества публикуется под именем уважаемого автора. Я имею в виду именно про хороших авторов, за Донцову никто не пишет, потому что она сама и есть бездарный графоман. А иначе издательство не будет с тобой работать, потому что не сможет окупить свои затраты. Конечно, ты можешь сам лично печатать свою книгу, но против нее будет стоять целая стена донцовых с толкиеном, которых будут выбирать чаще, и ты сам не сможешь окупить эту книгу.

byko3y ★★★★
()
Ответ на: комментарий от Borifed

Не совсем. Засовывать в один образ php,nginx,mysql возможно, но неправильно. Чем больше вы будете следовать рекомендации «один контейнер==один процесс» тем проще вам будет управлять с этим хозяйством. Полезно мыслить докер контейнер, как процесс в специфическом окружении.

Соответственно, вам нужно изготовить стопку образов. Что-то наподобии:

  • базовый слой с любимой операционной системой и всеми обновлениями безопасности
    • база + нужная версия php для проекта Х
      • + библиотеки для проекта Х
        • + актуальный php-код.
      • база + нужная версия php для проекта Y
        • + библиотеки для проекта Y
          • + актуальный php-код.
    • + nginx
    • + mysql

    И отдельно от этого под каждый проект создавать docker-compose.yaml в котором описывается как контейнеры запускаются, как взаимодействуют, предоставляются дополнительные конфиги и volumes.

    В результате можно будет добиться следующего:

    1. Изоляция от инфраструктуры исполнения. В общем-то всё равно что там у заказчика, хоть centos древний, хоть арч самоновейший, если там есть подходящее ядро и docker ­-- ваш код можно будет развернуть одной командой.
    2. Возможность восстановить любую конфигурацию в будущем. У меня была железная нода, который все боялись трогать. Предыдущий админ как-то установил энв с npm и библиотеками. Сборочный скрипт перестал работать, потому что он скачивал ресурсы из интернетов, а они оттуда исчезли. И никто не понимает как эта фигня работает и как её исправить. Хорошо, тот проект потом закрылся.
    3. Возможность, например, изолированно накатить security update на все необходимые конфигурации без изменения вышележащих слоёв.
ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Питон довольно сильно похож на CL, исходя из того, что я знаю. Оба динамические, оба функциональные,

А когда в питон многострочные лямбды завезут?

ugoday ★★★★★
()
Ответ на: комментарий от den73

в Го своих абстракций мало, поэтому они не мешаются, снижая выбор

Основной смысл абстракций в Го - это возможность многопоточной работы без заморочек. Но фактически для многопоточной работы вне специализации Го нужно опять-таки заморачиваться и делать собственные инструменты, что рушит всю идею «низкоуровневый язык с простыми средствами многопоточности». Потому для него и нет библиотек, кроме специализированных серверных - он просто не подходит для других задач.

И он не сишечка, которая слишком много граблей в себе содержит - даже с генерацией кода нелегко с ними справиться

Я уже не помню, когда в последний раз имел проблемы с генерацией кода в сишке. Сообщения об ошибках непонятные? Я больше виню в этом синтаксис, который создает трудности в различении объявления функций, объявления переменной, и просто исполняемого кода, из-за чего в случае синтаксической ошибки транслятор сходит с ума от бессмысленности входного текста.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Библиотека для создания «прозрачных» шаблонов загнивает тут:

Отличие CL от Питона ещё в скорости и наличии элементов статической типизации. А для голанга есть что-нибудь, подобное https://github.com/lihaoyi/macropy Я нашёл github.com/cosmos72/gomacro, но у него хелловорлд не запустился пока что, и некогда.

Макросы лиспа нужны для создания новых видов сущностей. Например, шаблоны (посмотри на калейдоскоп шаблонизаторов для HTML хотя бы - это разве не то же, что макросы лиспа, вид в профиль?). Я сейчас страдаю от того, что я не могу нажать «перейти к определению» и открыть описание своей таблицы SQL. Реально страдаю. Когда я был лиспером, у меня была такая фича и я это помню, помню тот комфорт. Макросы нужны для создания новых видов сущностей, помимо переменных, функций и типов. Таблица SQL - это метасущность, к-рая не является ни функцией, ни переменной, ни типом и имеет свой способ формирования пространств имён. Сейчас я лениво подумываю о том, чтобы представить таблицы SQL в виде каких-то других сущностей, по которым в VS Code можно настроить навигацию.

Кроме того лисп - это ливкодинг. Любой пользователь емакса может начать программировать емакс, это делается буквально двумя командами. Но я до сих пор не знаю, как программировать VS Code, и мне кажется, что придётся потратить день на изучение, и ливкодинга никогда не будет.

В Питоне нет такого ливкодинга. В JS, как ни странно, есть. А насчёт ненужности ИТ - я только за, но пасту истории обратно в тюбик не запихнёшь.

den73 ★★★★★
()
Ответ на: комментарий от elonmusk

А как можно обеспечить то, что на разных машинах код запускается на одном и том же образе? Чтобы, например, код одинаково запускался у разработчиков и на stage и production-сервере.
Devops-инженер должен скинуть образ всем разработчикам?

Для этого используется docker registry, свой приватный или какой-то публичный. Образы пушатся и пулятся из него.

orm-i-auga ★★★★★
()
Ответ на: комментарий от byko3y

Основной смысл абстракций в Го - это возможность многопоточной работы без заморочек.

Как ни странно, там нет goroutine local storage, которая является наиболее полезной из таковых абстракций. Единственная абстракция, которую я там нахожу - это зелёный тред и своеобразный способ реализации планировщика задач. Также там нет абстракции «канал поверх границ процесса», который позволил бы легче создавать кластеры из процессов. Хотя это достигается, наверное, библиотеками. Но это в любом языке можно достичь библиотеками.

Потому для него и нет библиотек

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

Я уже не помню, когда в последний раз имел проблемы с генерацией кода в сишке.

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

den73 ★★★★★
()
Ответ на: комментарий от ugoday

А когда в питон многострочные лямбды завезут?

Чего тебе не хватает сейчас?

def ReturnLambda():
  return lambda x: \
    x + " " + \
    x + " " + x
    
def ReturnLambda2():
  return lambda: (
    print('Second line'),
    print('Third line')
    )
    
print(ReturnLambda()('word'))
ReturnLambda2()()
byko3y ★★★★
()
Ответ на: комментарий от ugoday

А теперь тоже самое для изоляции файловой системы, network namespace и перенаправлении портов в iptables, пожалуйста

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

Есть ровно единственный сценарий, в котором я вижу необходимость в таком подходе

Скудость вашего воображения не проблема докера.

«Давайте просто сделаем зоопарк софта, чтобы мне было чем заняться с моими навыками докера».

Докер стал любимцем только со слов разработчиков докера.

Значит вы просто не в курсе что происходит в индустрии. Бывает.

Сами пользователи докера не знают, что происходит в индустрии. Если ты зайдешь на форумы докера, то увидишь, что они забиты неквалифицированными людьми, которые не разбираются ни в ОС, ни в докере. Docker Inc. просто потратило миллионы долларов для того, чтобы написать на каждом доме «докер - круто», а индусы проходили мимо и подумали, что это мнение восторженных фанатов и обычных пользователей докера. А когда возникло предложение - возник и спрос.
Спроси его «что вы можете сделать с докером, чего не можете без докера?», и он начнет перечислять все функции и сценарии, для которых докер просто не нужен.
У докера чудовищно узкая сфера применения - это упомянутое мной тестирование софта при разработке. Но когда на рынке есть девопсы, готовые за доширак админить докер, но не умеющие админить линукс, то руководитель еще подумает, стоит ли ему нанимать квалифицированного админа линукса или все-таки индуса-девопса.

byko3y ★★★★
()
Ответ на: комментарий от den73

Отличие CL от Питона ещё в скорости и наличии элементов статической типизации.

В питоне есть разные элементы статической типизации, хоть до хаскеля и не дотягивают.
Cython уделает CL, однако же это уже не совсем питон. PyPy скорее всего немного медленее или такой же, как скомпилированный лисп.

В Питоне нет такого ливкодинга.

Как это нет, если есть? IDLE для кого сделали?

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

А теперь объясни, зачем это нужно

Консультации платные, €120 в час, минимальный пакет — 3 часа.

«Давайте просто сделаем зоопарк софта, чтобы мне было чем заняться с моими навыками докера».

Одни люди решают реальные проблемы за реальные деньги, а другие — ноют и жалуются «а чего всё такое сложное стало, языков каких-то напридумывали, библиотек понаписали, а зачем понаписали и сами не знают». Вы свободны выбирать между этими позициями.

Сами пользователи ...

Вы прослушали классическое брюзжание старпера на тему «не та нынче молодёжь». Отрадно видеть, что в наш век стремительного технического прогресса человеческая природа остаётся неизменной.

ugoday ★★★★★
()
Ответ на: комментарий от den73

Таблица SQL - это метасущность, к-рая не является ни функцией, ни переменной, ни типом и имеет свой способ формирования пространств имён. Сейчас я лениво подумываю о том, чтобы представить таблицы SQL в виде каких-то других сущностей, по которым в VS Code можно настроить навигацию.

Выглядит будто вам хочется ORM, но традиционные вас чем-то не устраивают. А собственно чем?

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Одни люди решают реальные проблемы за реальные деньги, а другие — ноют и жалуются «а чего всё такое сложное стало, языков каких-то напридумывали, библиотек понаписали, а зачем понаписали и сами не знают»
Консультации платные, €120 в час, минимальный пакет — 3 часа

Маловато. Экстрасенсы побольше берут, можно у них совета спросить. Кому-то даже поможет... наверное. Тут как бы главное - убедить в своей важности и нужности, а заказчики частенько плохо соображают в технологиях. Ты думаешь почему Оракл до сих пор что-то продает?
Мне понравилось, когда у Лебедева в ЖЖ был «эксперт по информационной безопасности», которому прям на месте взломали почту и увели аккаунт - этот «эксперт», наверное, тоже решает «реальные проблемы за реальные деньги».

Вы прослушали классическое брюзжание старпера на тему «не та нынче молодёжь».

Индусы остались ровно те же, что и были раньше, просто их стало больше. Талантливая молодежь мне вполне симпатична.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

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

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

Deleted
()
Ответ на: комментарий от byko3y

Cython уделает CL, однако же это уже не совсем питон. PyPy скорее всего немного медленее или такой же, как скомпилированный лисп.

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

den73 ★★★★★
()
Ответ на: комментарий от Deleted

Это ж только марксистсколенинское учение верно всегда и повсюду (нет), а эмпирические советы надо применять по ситуации.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

Как это нет, если есть? IDLE для кого сделали?

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

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от ugoday

Выглядит будто вам хочется ORM, но традиционные вас чем-то не устраивают. А собственно чем?

ORM не устраивают тем, что они заменяют мощную и полезную реляционную парадигму на слабую и безполезную объектную, при этом ещё чудовищный штраф по скорости (2-3 порядка). У меня вместо этого был кодогенератор с вьюхами и пр., и хранимые процедуры. Так победим. Начал откапывать этот кодогенератор из архивов.

den73 ★★★★★
()
Ответ на: комментарий от den73

Но давайте не превращать эту тему в тему про всё на свете. И про лисп тоже можно не обсуждать - чисто теоретический вопрос на сегодня. Как раз разбирал только что бумаги 20-летней давности про всякий ИИ, который я тогда читал, в т.ч. распечатки фрагментов Cltl2, всякое там представление знаний, логическое программирование, доказательство теорем :) Всё в макулатуру пойдёт.

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от ugoday

«а чего всё такое сложное стало, языков каких-то напридумывали, библиотек понаписали, а зачем понаписали и сами не знают»

Нет, что ты, все гуглами стали. Даже стартапы без клиентов и те уже хайлоад-докер-кубернетес-бигдата.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Ничего, выговариваться тоже иногда полезно.

ugoday ★★★★★
()
Ответ на: комментарий от byko3y

это клевый способ устроиться на работу

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

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

i-rinat ★★★★★
()
Ответ на: комментарий от ugoday

Не надо использовать контейнер как облегчённую замену виртуальных машин.

Почему нет? Это же удобно.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

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

Катюша Новосельцева нам расскажет про преимущества докера для серьезных дядь:
https://www.upwork.com/hiring/for-clients/docker-benefits/
Вот у нас есть ADP, Spotify, ING. Вот еще одна статья:
https://apiumhub.com/tech-blog-barcelona/top-benefits-using-docker/
https://technofaq.org/posts/2018/12/reasons-why-docker-is-so-popular-in-the-i...
Снова ING, Paypal, ADP and Spotify.

Давайте рассмотрим, как же Spotify чудесным образом сделал сказку явью. Сразу говорю, что информация прочитана из документов, которые изначально были отмечены грифом «TOP SECRET NOFORN». Я надеюсь, что меня не убьют после этого. Перевожу на русский:
https://www.quora.com/What-is-a-high-level-overview-of-how-Spotify-uses-Docke...
У Spotify выполняется большое количество (>100) бэкэнд-сервисов при помощи Docker и Helios на производственных серверах. Большая часть из них развертывается при помощи конвееров CI/CD (Continious Integration/Continious Development, непрерывная интеграция/непрерывная разработка, прим. перев.). Путь разработки обычно выглядит так:
- Инженер сливает изменения кода с главной веткой репозитория сервиса;
- Экземпляр Jenkins получает уведомление об изменении и начинает билд сервиса. Большинство сервисов написаны на Java и используют наш docker-maven-plugin для создания образа Docker;
- Образ Docker проходит через серию тестов интеграции при помощи нашего фреймворка тестов;
- Если тесты проходят успешно, CI конвеер завершается, запуская «rolling deploy» соответствующей группы развертывания в производственные сервера;
- Helios выполняет «rolling deploy», на одной машине за раз. Каждый контейнер должен пройти проверку здоровья перед тем, как происходит переход к следующей машине. Существует много вариаций этого потока. Например, некоторые команды автоматически развертывают изменения в тестовой среде, но требуют ручного тригера для развертывания в производственный сервер; некоторые команды используют простые dockerfile-ы вместо плагина maven; и так далее.

Давайте же думать, как большие дяди достигли упрощения процесса, и как нам это можно использовать;
- Стать фирмой с сотнями разработчиков, которые разрабатывают сотни микросервисов;
- Раскидать сервера по всему миру и запускать копии всех микросервисов на каждом сервере;
- Разработать свою систему оркестрации микросервисов;
- Разработать способы обхода проблем докера, создать механизмы детектирования отказов сервисов/утечки ресурсов https://labs.spotify.com/2017/06/22/improving-critical-infrastructure-rollouts/

Теперь о том, что же это может экономить. Цитирую (не перевожу, сорян):
https://stackoverflow.com/questions/42433068/to-what-extent-can-a-docker-clus...
- 25-50% cost savings were reported in How Qbox Saved 50% per Month on AWS Bills Using Kubernetes and Supergiant you'll also find a clear and detailed calculation in the related How to Calculate Kubernetes Cost Savings blog post
- Some discussions in the Hackernews comments seem to confirm ~30% cost savings in others scenarios
- Others saved 66% of their instances when switching to orchestration with DC/OS
- Matt Heath from Monzo also reports ~50% of savings when using Microservices with Kubernetes

Да, действительно, Kubernetes (на который перешел и Spotify) позволяет упаковывать микросервисы в машине, экономя ресурсы железа. Всё, я пошел становится международной фирмой с микросервисами, я теперь тоже эксперт. Надеюсь, elonmusk теперь тоже понял, как ему нужно работать с Docker, и он ко мне присоединится.

Не надо использовать контейнер как облегчённую замену виртуальных машин.

Почему нет? Это же удобно.

Смотря для чего. Если исполнять проверенный код, то все ок. Если же ты предоставляешь свои услуги непонятно кому, то только виртуалка, как это делает гугль и амазон - ты получаешь контейнер в виртуальной машине. Я догадываюсь, что «консультант» сейчас напишет, что контейнер невозможно взломать, но я предпочитаю придерживаться более реалистичного взгляда «доступ к шелу = выполнение кода в режиме ядра».

byko3y ★★★★
()
Ответ на: комментарий от den73

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

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

Когда я последний раз это перепроверял, горячее переопределение функции в Питоне работало неправильно, не так, как в лиспе и JS... Что такое IDLE - не знаю, и знать не желаю.

Это можно написать проще: «я не осилил».

byko3y ★★★★
()
Ответ на: комментарий от urxvt

«а чего всё такое сложное стало, языков каких-то напридумывали, библиотек понаписали, а зачем понаписали и сами не знают»

Нет, что ты, все гуглами стали. Даже стартапы без клиентов и те уже хайлоад-докер-кубернетес-бигдата.

Я уже почти хайлоад-бигдата. Присоединяйся. Будем брать 500$ в час за консультации о том, как мы стали такими крутыми.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.