Produkt · MultiDocker
MultiDocker Logo
Unser Produkt

Alle Docker-Projekteparallel auf einem Rechner

MultiDocker betreibt beliebig viele docker-compose-Projekte parallel auf einem Rechner. Ein zentraler Traefik-Edge macht jedes Projekt unter einem echten HTTPS-Hostnamen erreichbar - ohne Port-Verteilung und ohne eine Zeile Änderung an der Compose-Datei im Repository.
3
Projekte parallel und trotzdem nur ein Port 443 im Zugriff
0
Zeilen Änderung an der docker-compose.yml im Projekt
1
Befehl, bis ein neu geklontes Projekt unter HTTPS läuft
Warum lokale Umgebungen bremsen

Drei Projekte, ein Rechner, ständig derselbe Konflikt

Wer mehrere Anwendungen parallel betreut, verbringt einen Teil des Tages mit Infrastruktur statt mit dem Produkt.

Jedes Projekt bringt seine eigene docker-compose.yml mit, und jede davon will Port 80, 3306 oder 8080 für sich. Sobald das zweite Projekt startet, meldet Docker address already in use. Die übliche Antwort: im Projekt die Ports umbiegen, also 8081 statt 8080, 3307 statt 3306. Damit liegt eine lokale Anpassung in einer Datei, die dem Projekt gehört und im Repository versioniert ist.

Was bleibt, sind Adressen, die niemand im Kopf behält. Der Shop läuft auf localhost:8080, die API auf localhost:8081, das Frontend auf localhost:3000. Weil alles auf demselben Host liegt, teilen sich die Anwendungen den Cookie-Namensraum, und Anfragen zwischen zwei Ports gelten als Cross-Origin. Fehler, die es in Produktion nicht gibt, entstehen so nur lokal.

Der übliche Ausweg ist Reihenbetrieb: erst das eine Projekt herunterfahren, dann das andere starten. Bei zwei Kontextwechseln am Tag kostet das mehr Zeit als die Aufgabe selbst.

Was MultiDocker daran ändert

Kein Projekt bindet noch einen Host-Port - nur der Edge hört auf 80 und 443.
Jedes Projekt bekommt einen eigenen Hostnamen mit gültigem Zertifikat.
Getrennte Hostnamen bedeuten getrennte Cookies und saubere CORS-Verhältnisse.
Alle Projekte laufen weiter, der Wechsel kostet keinen Neustart.
Ein Edge, viele Projekte

Routing über Hostnamen statt über Ports

Der zentrale Traefik v3 nimmt jede Anfrage an und entscheidet anhand des Hostnamens, welches Projekt antwortet.

# Einmalig: Zertifikat, DNS-Resolver und Edge-Stack
mdocker setup

# Drei Projekte registrieren und starten
mdocker init ~/Projects/shop
mdocker init ~/Projects/api
mdocker init ~/Projects/cms
mdocker up shop api cms

# Alle drei sind jetzt parallel erreichbar
#   https://shop.coding9.test
#   https://api.coding9.test
#   https://cms.coding9.test
#   https://mail.coding9.test   (Mailcatcher)

mdocker ls        # Status aller Projekte
mdocker doctor    # Werkzeuge, Ports, DNS und Zertifikat prüfen

Die Compose-Datei bleibt unberührt

MultiDocker schreibt pro Projekt eine Override-Datei in das eigene Konfigurationsverzeichnis und ruft docker compose mit beiden Dateien auf. Der Override entfernt die Host-Port-Mappings, hängt die Container an das gemeinsame Edge-Netz und setzt die Traefik-Labels für den Hostnamen. Im Repository ändert sich nichts, und wer ohne MultiDocker arbeitet, startet das Projekt weiter wie bisher.

HTTPS wie auf dem Server

Beim Setup legt MultiDocker über mkcert ein Wildcard-Zertifikat für die Testdomain an und trägt einen lokalen DNS-Resolver ein. Danach löst jeder Name unterhalb der Domain auf den eigenen Rechner auf und der Browser akzeptiert das Zertifikat. Secure-Cookies, SameSite-Regeln und OAuth-Redirects lassen sich damit lokal so testen, wie sie später laufen.

Woraus MultiDocker besteht

CLI, App und ein gemeinsamer Edge-Stack

Alle Bausteine greifen auf dieselbe Registry und dieselben Overrides zu - Terminal und App zeigen denselben Stand.

mdocker-CLI

Ein Befehl je Aufgabe: init registriert ein Projekt, up startet es, ls zeigt den Stand aller Projekte, doctor prüft Werkzeuge, Ports und DNS.

macOS-App

SwiftUI-Oberfläche über derselben CLI. Projektliste, Logs, Git-Stand und Start/Stop pro Service, ohne Terminal.

Traefik-Edge

Ein Traefik v3 auf Port 80 und 443 nimmt allen Verkehr an und verteilt ihn anhand des Hostnamens. Projekte belegen selbst keine Host-Ports mehr.

Mailcatcher zentral

Ausgehende Mails aller Projekte laufen in einem Postfach zusammen, erreichbar unter mail.coding9.test. Lokale Mailcatcher in den Projekten werden abgeschaltet.

Profil-Erkennung

Beim Registrieren erkennt MultiDocker den Projekttyp und wählt das passende Profil - inklusive Web-Service, SMTP-Variablen und Routing-Port.

DB-Toolkit

Connection-Strings zum Kopieren, Dumps und benannte Snapshots je Projekt. Ein Datenstand lässt sich vor einer Migration sichern und danach zurückholen.

Demo-Link teilen

mdocker share legt einen Cloudflare-Quick-Tunnel auf das lokale Projekt und gibt eine öffentliche HTTPS-Adresse für kurze Abstimmungen aus.

Override statt Fork

Die generierte Override-Datei liegt außerhalb des Repositories. Kollegen ohne MultiDocker starten dasselbe Projekt weiter mit docker compose up.
So kommt ein Projekt hinein

Vom geklonten Repository zur HTTPS-Adresse

Setup einmalig

mdocker setup legt Wildcard-Zertifikat, DNS-Resolver, Edge-Netz und den Traefik-Stack an.

Projekt registrieren

mdocker init zeigt auf den Projektordner, erkennt das Profil und erzeugt die Override-Datei.

Starten

mdocker up ruft docker compose mit Original- und Override-Datei auf - ohne Host-Ports.

Im Browser öffnen

Das Projekt antwortet unter seinem eigenen Hostnamen, zum Beispiel https://shop.coding9.test.

Was sich im Alltag ändert

Weniger Infrastruktur, mehr Projektzeit

Kein Port-Management mehr: shop, api und cms laufen parallel
Echte HTTPS-Hostnamen lokal - Cookies, CORS und Redirects verhalten sich wie in Produktion
Original-Compose-Dateien bleiben unverändert im Repository
Projektwechsel ohne vorheriges Herunterfahren des anderen Stacks
Onboarding über einen dokumentierten Befehlssatz statt mündlicher Absprachen
Alle Mails der Projekte in einem zentralen Postfach

Gebaut für Teams, die mehrere Anwendungen gleichzeitig betreuen

MultiDocker ist in unserer eigenen Entwicklung entstanden und läuft dort täglich. Warum wir es gebaut haben und welche Wege wir dabei verworfen haben, steht im Beitrag zur Entstehung von MultiDocker.

macOSDocker Desktop / OrbStackTraefik v3mkcertSwiftUI
Häufige Fragen

MultiDocker im Detail

Was ist MultiDocker?

MultiDocker ist ein Werkzeug für lokale Entwicklungsumgebungen auf macOS. Es lässt beliebig viele docker-compose-Projekte nebeneinander laufen und macht jedes davon unter einem eigenen HTTPS-Hostnamen erreichbar, zum Beispiel shop.coding9.test und api.coding9.test. Statt Ports zu verteilen, routet ein zentraler Traefik den Verkehr anhand des Hostnamens an den passenden Container.

Muss ich meine docker-compose.yml dafür anpassen?

Nein. MultiDocker legt pro Projekt eine eigene Override-Datei außerhalb des Repositories an und startet docker compose mit beiden Dateien. Die Override-Datei entfernt die Host-Port-Mappings, hängt die Container an das gemeinsame Edge-Netz und setzt die Traefik-Labels. Die Datei im Projekt bleibt unverändert und lässt sich weiter ohne MultiDocker verwenden.

Warum HTTPS statt localhost?

Cookies mit Secure-Flag, SameSite-Regeln, CORS-Header, OAuth-Redirects und Service Worker verhalten sich unter einem echten Hostnamen mit gültigem Zertifikat anders als unter localhost mit wechselnden Ports. MultiDocker legt beim Setup ein Wildcard-Zertifikat über mkcert an und trägt einen lokalen DNS-Resolver für die Testdomain ein, sodass lokal dieselbe Konstellation gilt wie später auf dem Server.

Welche Docker-Umgebung wird vorausgesetzt?

MultiDocker läuft auf macOS mit Docker Desktop oder OrbStack. Zusätzlich werden mkcert, yq, jq und openssl benötigt - der Befehl mdocker doctor prüft alle Abhängigkeiten und meldet, was fehlt oder welcher Prozess Port 80 beziehungsweise 443 belegt.

Wie komme ich vom Host an die Datenbanken?

Über mdocker inspect. Der Befehl listet je Service den Container, die internen Ports und einen fertigen Connection-String für MySQL, PostgreSQL oder Redis zum Kopieren in den Datenbank-Client. Für Dumps, Snapshots und das Zurückspielen gibt es mdocker db mit den Verben dump, snapshot, snapshots, restore und restore-snapshot.

Kann ich einem Kunden einen laufenden Stand zeigen?

Ja, über mdocker share. Der Befehl öffnet einen Cloudflare-Quick-Tunnel auf das lokal laufende Projekt und gibt eine öffentliche HTTPS-Adresse aus. Die Adresse wechselt bei jedem Start und ist ohne Passwortschutz erreichbar - für eine kurze Abstimmung genügt das, für Dauerbetrieb ist eine echte Staging-Umgebung die richtige Wahl.

Lokale Umgebung, die nicht im Weg steht

Sehen Sie sich MultiDocker im Detail an oder sprechen Sie mit uns über Ihre lokale Entwicklungsumgebung - vom Compose-Setup bis zur Übergabe an neue Teammitglieder.