Зачем нужен Docker?

Почему разработчики выбрали Docker?

Существуют Linux-контейнеры (LXC). Есть скрипты для виртуальных машин. Можно создать ISO-установщик.
LXC — это буквально контейнеры.

Для системных администраторов эта суета вокруг Docker избыточна и бессмысленна, особенно если у вас уже настроена сеть с фаерволами и прочим.

Я понимаю, что это упрощённая установка для тех, кто не умеет работать с Linux и настраивать его безопасность, но для системных администраторов необходимость изучать Docker бессмысленна. LXC и виртуальные машины всегда будут намного лучше Docker.

Для системных администраторов, управляющих серверами, мы создаём LXC и виртуальные машины в отдельной сети. Поэтому я создал отдельную виртуальную машину для Discourse, а уже внутри неё — контейнер Docker. -_-

Теперь это сеть внутри сети: отдельная изолированная виртуальная машина, созданная только для того, чтобы запустить изолированный контейнер Docker. -_-

Нет никаких инструкций по установке без Docker, независимо от того, есть ли поддержка или нет. Нет руководств или помощи по отображению IP-адреса хоста в контейнере.

Потому что, когда они начали разрабатывать Discourse, это было лучшее доступное решение.

Если бы они делали это сегодня, я бы предположил, что единственное, что они могли бы сделать иначе, — это использовать docker-compose вместо своей собственной команды launcher, которая собирает и запускает образы Docker.

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

Даже настройка среды разработки Discourse/Rails/Ember на одном ноутбуке представляет собой определённую сложность.

Это правда. Если вы хотите форум, который можно использовать без Docker, вам не стоит выбирать Discourse.

Действительно ли Docker так плох?

Я поддерживаю это. docker-compose был бы на 100% лучше, так как я только что посмотрел краткий курс по Docker и docker-compose. Кажется, что если бы Discourse использовал docker-compose, я бы решил эту проблему без необходимости создавать тему.

docker-compose выполняет всю тяжелую работу, аналогичную тому, что делает launcher, но с docker-compose я мог бы легко настроить сеть и мост.

Я согласен. Я использую контейнеры. Только чистые LXC-контейнеры. Никакого дополнительного ПО не требуется. Однако это не так просто. Например: на одном из моих серверов у меня есть бронзовый тариф, который в основном предназначен для разработчиков. Дешевая и простая настройка. Как только подтверждается оплата, основной сервер получает запрос на создание либо LXC-контейнера, либо виртуальной машины в зависимости от выбора пользователя. Очевидно, что требуется доменное имя, либо будет выдано пользовательское поддоменное имя для сервера (LXC/VM). Также пользователю предлагается настроить собственную сеть, которая затем не может быть доступна из основной сети, и наоборот. Это по сути небольшой AWS.

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

Я не могу ни согласиться, ни не согласиться, так как лично не разрабатывал ничего с использованием Discourse/Rails/Ember. Это выходит за рамки моих знаний, и если разработчики говорят, что это проще, я не имею права не соглашаться с чем-то, чего не знаю.

В этом моя проблема. Я провел достаточно исследований по всем доступным форумным программам и использовал довольно много из них.

Мой выбор свелся к двум форумам:

  1. Discourse
  2. Flarum

Я выбрал Discourse как лучшее форумное программное обеспечение во всех аспектах, а также из-за моего единственного опыта работы с Docker, который был связан с Nginx Reverse Proxy Manager.

Я думал, что мне нужно только ввести некоторые данные в файл .yml, а затем выполнить docker-compose up -d. Я ошибся.

Проблема, с которой я сейчас столкнулся, решаема, просто потребуется время, чтобы разобраться.
Я отказываюсь использовать Flarum, потому что я использовал Discourse на многих платформах, и без обид к другим хорошим форумным программам, но Discourse — это лучшее доступное форумное решение на рынке.

Возможно, обновление до docker-compose могло бы помочь :smiley:

После быстрого поиска информации, просмотра руководств на 5 минут и нескольких видео на YouTube.

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

Я мог бы рассказать немного подробнее, но последние версии Docker и Docker Compose, на мой взгляд, отлично подходят для Discourse, так как он требует работы с множеством компонентов, и их довольно легко объединить с помощью Docker Compose. Таким образом, если что-то пойдет не так, разработчики точно будут знать, что делать.

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

Разве это не причина?

Почему вы официально поддерживаете только Docker?

Хостинг приложений Rails — дело сложное. Даже если на вашем сервере уже установлены Postgres, Redis и Ruby, вам всё равно нужно беспокоиться о запуске и мониторинге процессов Sidekiq и Rails, а также о настройке Nginx. С Docker ваша полностью оптимизированная конфигурация Discourse доступна в виде простого контейнера, а веб-интерфейс делает обновление до новых версий Discourse таким же лёгким, как нажатие кнопки.

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

Главная цель — не изоляция, а простота развёртывания…

Вам не нужно изолировать контейнер; вы можете запустить его в маршрутизируемом мосте или в мосте, который имеет порт, принадлежащий вашей внутренней сети. Первый вариант — это то, как мы запускаем его в продакшене — см. здесь видео от @mpalmer, где объясняется, как это работает.

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

У нас нет руководства, так как для этого кому-то пришлось бы его поддерживать, а подавляющее большинство людей, желающих этого, либо:

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

Например, я знаю, что есть люди, которые используют launcher для создания образа, который развёртывается через их собственные инструменты (будь то LXC, Kubernetes или что-то ещё), и это работает для них.

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

Docker — это золотая середина. Наша система не идеальна; она немного разрослась со временем, и мы определённо чувствуем боль от некоторых давно назревших рефакторингов. Мы создали launcher ещё до того, как docker-compose даже существовал.

Мы планируем провести рефакторинг и/или перейти на docker-compose, но в данный момент это не является приоритетом.

Запустить лаунчер для Discourse с переменными окружения, необходимыми для работы Nginx Reverse Proxy, не так уж сложно. В основном нужно просто добавить ENV в YAML-файл или включить их в вывод команды ./launcher start-command app.

docker-compose был не очень полезен на заре Discourse и, возможно, даже не существовал в то время.

Я ненавижу Docker (это слишком просто для меня, любой ребенок может это сделать, так что ничего особенного! Зевота)! И вместо того, чтобы просто написать код так, чтобы он работал и без официальной версии Docker… Я не понимаю! Даже официальный метод не работает!

А есть люди, которые ищут вызовы или даже уже освоили их! Для них Docker становится ещё большим препятствием, потому что им приходится разбираться ещё и с Docker!

Зачем ещё использовать Docker?