Can Discourse ship frequent Docker images that do not need to be bootstrapped?

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

В моей настройке Discourse используется один контейнер с Discourse и nginx, работающими через UNIX-сокет. PostgreSQL и Redis запущены как сервисы на хосте. Это довольно отклонение от стандартной конфигурации, но оно возможно из коробки.

С помощью Compose это частично возможно, возможно, с использованием довольно плохо спроектированной функции профилей. Но даже в этом случае всё получается довольно запутанным. Либо вам придется предоставлять разные файлы Compose для каждой вариации.

Вы просто переносите проблему.

Чистая настройка Compose для Discourse включала бы следующие сервисы в отдельных контейнерах:

  • Discourse
  • nginx
  • PostgreSQL
  • Redis

Discourse и nginx должны разделять том, это не проблема.

PostgreSQL и Redis… это те сервисы, которые вы, возможно, захотите разместить где-то ещё, не создавая для них специфичные для Discourse контейнеры. И тогда Docker Compose становится проблемой: команда docker compose up -d запустит нежелательный PostgreSQL. Хорошо, тогда мы используем docker compose --profile postgresql up -d для запуска базовой конфигурации Discourse с контейнером PostgreSQL, и docker compose --profile postgresql --profile redis up -d для «полной» полностью автономной конфигурации Discourse. Лучше не забыть аргумент --profile ..., иначе возникнут дополнительные проблемы.

Так что для улучшения пользовательского опыта вы создаете лаунчер, который берет на себя формирование нужной команды Docker Compose. Теперь мы вроде бы вернулись туда, откуда начали. За исключением того, что модификации контейнера nginx пока невозможны. Значит, мне нужны контейнеры nginx-http и nginx-unix, которые должны быть взаимно исключающими? …

Конечно, управление плагинами можно улучшить, но делать это с помощью Docker Compose — это будет ад.