Только для веба — нужен ли отдельный образ для каждого контейнера?

Привет, ребята.

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

Для только веб-контейнеров — как создать и использовать один образ, который такие контейнеры могли бы/должны были бы использовать совместно?

Это, безусловно, должно иметь смысл: такой «тонкий» контейнер с всем остальным снаружи (особенно при скромном бюджете на XS-виртуальных машинах), где у каждого свой собственный образ Docker, — это, на мой взгляд, не имеет смысла, верно?

Надеюсь, я упускаю какую-то «очевидную» документацию или инструкцию по такому простому (и распространённому/популярному?) сценарию?

Спасибо большое.

Да, вы можете использовать одну базу данных PostgreSQL для нескольких сайтов Discourse, но если вы не собираетесь использовать мультисайт (см. Multisite configuration with Docker), то для каждого сайта потребуется свой Redis.

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

Спасибо за потраченное время и попытки, однако… это не то, что я спрашивал.
Попробую ещё раз, извините, если снова не смогу сформулировать…
Когда я:
→ $ ./launcher bootstrap a.forum.xyz # или аналогично
процесс создаёт:

-> $ docker images
REPOSITORY                        TAG                 IMAGE ID       CREATED        SIZE
local_discourse/a.forum.xyz        latest              d7a7b6509811   2 hours ago    4.19GB

И это происходит с каждым запуском launcher для нового/другого форума.
В итоге у меня оказывается несколько образов одного и того же Discourse — это только у меня так, или результат должен быть другим?
Если это не только у меня и такой результат желаемый и ожидаемый, то это, конечно, я не разработчик и не знаю всех деталей процесса, но всё же крайне расточительно (особенно в случае web-only контейнера), не так ли?

Я надеялся, что при первом знакомстве с Discourse, как и с любым другим dockerized ПО, получится загрузить один образ и запускать от него множество контейнеров. Неужели Discourse не способен на такое?

Если вы хотите использовать один и тот же контейнер с разными настройками для различных сайтов, выполните команду:

./launcher start-cmd

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

Он содержит уникальные копии тем вашего сайта, включая JS, CSS и другие типы ресурсов.

Также уникальная комбинация ваших плагинов и их зависимостей.

Это долгая история, но Discourse и большинство инструментов были созданы до появления таких технологий, как Docker Compose.

Мы поставляем «тяжелый» контейнер, содержащий всё необходимое, и у этого подхода есть несколько компромиссов. Например, stateful-контейнер позволяет реализовать такие функции, как наш веб-интерфейс для обновления в один клик.

С точки зрения современных подходов к развёртыванию контейнеров это действительно большое расхождение. Эта тема подробно обсуждается в статье Может ли Discourse выпускать частые образы Docker, не требующие начальной настройки?, и её стоит прочитать.

В итоге наш текущий подход хорошо работает для людей с минимальными техническими навыками, которые могут копировать и вставлять команды в сеансе SSH, настраивать DNS, но не являются экспертами в работе с Linux-контейнерами.

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

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

В том руководстве я не нашёл объяснения, как использовать один Redis для нескольких экземпляров, но, похоже, что при наличии конфигурации мульти-сайта это работает из коробки?

Правильно ли я понимаю?
a) Мульти-сайт запускает один и тот же Docker-образ для нескольких форумов, используя один Redis и один сервер PostgreSQL.
b) Использование одного Redis для нескольких экземпляров Discourse (с одинаковым образом или нет) невозможно, поскольку без включения мульти-сайта к ключам Redis не будет добавляться префикс.
c) Другого способа принудительно задать префикс ключей Redis не существует.
d) Принудительное использование разных префиксов ключей Redis для разных образов Discourse позволило бы использовать один сервер Redis.
e) Общая поддержка принудительного задания префикса Redis потребовала бы нескольких изменений в ядре.