Kann Discourse regelmäßig Docker-Images bereitstellen, die nicht gebootstrapped werden müssen?

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.

1 „Gefällt mir“