Docker Compose bietet nicht die erforderliche Funktionalität. Die Dockerfile-Templating-Konstruktion von Discourse ermöglicht flexible Docker-Ergebnisse. Mit Compose haben Sie lediglich eine mögliche Sammlung fester Dockerfiles, die zu einer Vielzahl von Containern führen können.
In meinem Discourse-Setup verwende ich einen einzelnen Container mit Discourse und Nginx, der einen UNIX-Socket nutzt. PostgreSQL und Redis sind ein Dienst auf dem Host. Das weicht erheblich vom Standard-Setup ab, ist aber out-of-the-box möglich.
Es ist teilweise mit Compose möglich, vielleicht durch die eher schlecht konstruierte Profil-Funktion. Aber selbst dann ist es ziemlich unübersichtlich. Oder Sie müssten für jede Variante unterschiedliche Compose-Dateien bereitstellen.
Sie verschieben nur das Problem.
Ein sauberes Compose-Setup für Discourse würde die folgenden Dienste in separaten Containern umfassen:
- Discourse
- Nginx
- PostgreSQL
- Redis
Discourse und Nginx müssen sich ein Volume teilen, keine große Sache.
PostgreSQL und Redis… das sind Dinge, die Sie vielleicht woanders hosten möchten und keinen Discourse-spezifischen Container dafür benötigen. Und nun wird Docker Compose zu einem Problem: docker compose up -d startet Ihr unerwünschtes PostgreSQL. Okay, also machen wir daraus docker compose --profile postgresql up -d, um das grundlegende Discourse-Konfiguration und einen PostgreSQL-Container zu starten. docker compose --profile postgresql --profile redis up -d für das “vollständige” in sich geschlossene Discourse-Container-Setup. Sie sollten besser kein --profile ...-Argument vergessen, denn dann haben Sie weitere Probleme.
Für eine bessere UX erstellen Sie also einen Launcher, der sich um die Erstellung des gewünschten Docker Compose-Befehls kümmert. Jetzt sind wir irgendwie wieder am Anfang. Außer dass Modifikationen am Nginx-Container noch nicht möglich sind. Ich brauche also einen Nginx-HTTP-Container und einen Nginx-UNIX-Container, die sich gegenseitig ausschließen sollten? …
Sicher, das Plugin-Management könnte besser sein, aber das mit Docker Compose zu machen, das wird die Hölle.