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?
Antworten:
Wenn Sie eine Datenbankpersistenz unabhängig von Ihrem CMS-Container benötigen, können Sie einen Container für MySQL und einen Container für Ihr CMS verwenden. In diesem Fall kann Ihr MySQL-Container noch ausgeführt werden und Sie können Ihr CMS so oft neu bereitstellen, wie Sie möchten.
Für die Entwicklung - Eine weitere Option besteht darin, MySQL-Datenverzeichnisse von Ihrem Host / Entwicklungscomputer mithilfe von Datenmengen zuzuordnen. Auf diese Weise können Sie Datendateien für MySQL (im Docker) mit git (auf dem Host) verwalten und den Anfangszustand jederzeit "neu laden" (bevor Sie den MySQL-Container starten).
Ja, ich denke, Sie sollten einen separaten Container für db haben.
Ich benutze nur ein einfaches Skript:
Ja, Sie können den Datenvolumen -v-Schalter verwenden. Ich würde dies für die Entwicklung verwenden. Sie können die schreibgeschützte Bereitstellung verwenden, sodass bei Bedarf keine Änderungen an diesem Verzeichnis vorgenommen werden (Ihre App sollte die Daten ohnehin an einem anderen Ort speichern).
Wie auch immer, für die endgültige Bereitstellung würde ich mit Dockerfile mit erstellen und ein Image erstellen
ADD /home/user/dev/cmsdir /var/www/cmsdir
Ich weiß es nicht :-)
quelle
Sie möchten Docker-Compose verwenden. Folgen Sie dem Tutorial hier. Sehr einfach. Scheint alle Ihre Kästchen anzukreuzen.
https://docs.docker.com/compose/
quelle
Ich verstehe, dass dieser Beitrag zu diesem Zeitpunkt über ein Jahr alt ist, aber ich habe mir kürzlich sehr ähnliche Fragen gestellt und habe einige großartige Antworten auf Ihre Fragen.
Sie können eine MySQL-Docker-Instanz einrichten und Daten in einem zustandslosen Datencontainer beibehalten, auch wenn der Datencontainer nicht aktiv ausgeführt werden muss
Ja, ich würde empfehlen, eine separate Instanz für Ihren Webserver und Ihre Datenbank zu haben. Dies ist die Stärke von Docker.
Schauen Sie sich dieses Repo an, das ich gebaut habe. Grundsätzlich ist es so einfach wie
make build
&make run
und Sie können einen Webserver und einen Datenbankcontainer lokal ausführen.Sie verwenden das
-v
Argument, wenn Sie den Container zum ersten Mal ausführen. Dadurch wird ein bestimmter Ordner auf dem Container mit dem Host verknüpft, auf dem der Container ausgeführt wird.Ich denke, Ihre Ideen sind großartig und es ist derzeit möglich, alles zu erreichen, was Sie verlangen.
Hier ist eine schlüsselfertige Lösung , die alle von Ihnen aufgeführten Anforderungen erfüllt.
quelle
Ich habe ein benutzerfreundliches Docker-Compose- Setup zusammengestellt, das Ihren Anforderungen an den Entwicklungsworkflow entsprechen sollte.
https://github.com/ehyland/docker-silverstripe-dev
Haupteigenschaften
HHVM
+NGINX
oderApache2
+PHP5
Die README.md sollte klar genug sein, um Ihnen den Einstieg zu erleichtern .
quelle