Ich habe eine Ahnung, dass Docker die Vermutung, meinen Webdev-Workflow erheblich verbessern könnte - aber ich habe es noch nicht ganz geschafft, mich mit einem Projekt zu befassen, das Docker zum Stack hinzufügt.
Der grundlegende Software-Stack würde folgendermaßen aussehen:
Software
Docker-Image (s) mit benutzerdefiniertem LAMP-Stack
- Apache mit mehreren Modulen
- MYSQL
- PHP
- Einige CMS, zB Silverstripe
GIT
Arbeitsablauf
Ich könnte mir vorstellen, dass der Workflow ungefähr so aussieht:
Entwicklung
- Schreiben Sie einen
Dockerfile
, der einen LAMP-Container definiert, der die oben angegebenen Anforderungen erfüllt- REQ: Der Computer sollte Apache / MySQL direkt nach dem Booten starten
- Erstellen Sie das Docker-Image
- Kopieren Sie die zum Ausführen des CMS erforderlichen Dateien in z
~/dev/cmsdir
- Setzen Sie
~/dev/cmsdir/
unter Versionskontrolle
- Setzen Sie
- Führen Sie die Docker Container, und irgendwie montieren
~/dev/cmsdir
zu/var/www/
auf den Behälter - Füllen Sie die Datenbank
- Arbeite in
/dev/cmsdir/
- Docker-Container festschreiben und herunterfahren
Einsatz
- Remote-Host einrichten (zB mit ansible)
- Verschieben Sie das Container-Image auf den Remote-Host
- Fetch-
cmsdir
Projekt über Git - Führen Sie den Docker-Container aus, ziehen Sie die Datenbank ein und mounten Sie
cmsdir
in/var/www
Nun, auf dem Papier sieht das alles ganz gut aus, ABER ich bin mir nicht ganz sicher, ob dies überhaupt der richtige Ansatz wäre.
Fragen:
Wie kann ich die Datenbank während der lokalen Entwicklung zwischen den Neustarts der Containerinstanz beibehalten? Oder müsste ich jedes Mal SQL-Dump ausführen, bevor ich den Container herunterfahre?
Sollte ich separate Containerinstanzen für die Datenbank und den Apache-Server haben? Oder würde es ausreichen, einen einzigen Behälter für den oben genannten Anwendungsfall zu haben?
Wie kann ich bei gleichzeitiger Verwendung separater Container für Datenbank und Server das gleichzeitige Hoch- und Runterdrehen automatisieren?
Wie würde ich tatsächlich
/dev/cmsdir/
in das Container-/var/www/
Verzeichnis einbinden? Sollte ich dafür Datenmengen verwenden ?Habe ich irgendwelche Fallstricke verpasst? Was könnte vereinfacht werden?