- Jan. 2, 2015
- --
Magnolia DevOps Serie, Teil 1: ein Docker-Image für Magnolia
Isolierte Magnolia-Instanzen sicher bereitzustellen und sie einfach miteinander zu verbinden, kann eine anspruchsvolle Aufgabe sein. Wenn Sie das richtige Tool wie Docker wählen, kann dieses Problem auf elegante Weise gelöst werden.
Ich habe vor kurzem begonnen, ein Docker-Basis-Image für Magnolia zu schreiben. Dieses Image befindet sich noch in einem frühen Stadium der Entwicklung und benötigt noch einige Verbesserungen, wie die am Ende dieses Beitrags beschriebenen. Wir werden in Kürze sehen, wie es verwendet werden kann, um eine neue Magnolia-Instanz schnell zu instanziieren - aber lassen Sie uns zunächst einen Blick auf seinen Inhalt werfen.
Bild-Spezifikationen
Das Image basiert auf Ubuntu 14.10, JDK 7 und Tomcat 8 und enthält JDBC-Treiber für MySQL und PostgreSQL.
Das Image enthält keine Magnolia-Anwendung - eine Magnolia WAR-Datei muss erstellt und innerhalb des Containers an diesen Ort kopiert werden: $CATALINA_BASE/webapps.
Der Container startet automatisch einen leeren Tomcat-Server und gibt den Port 8080 frei.
Wie man es benutzt
Ihr Magnolia-Projekt muss eine eigene Dockerdatei verwenden. Diese Datei muss das Magnolia-Basisimage erben und ist verantwortlich für:
Uploading your WAR file into the image.
Modifying the server settings to fit your production needs.
Im folgenden Beispiel werden wir kein Magnolia-Projekt verwenden. Stattdessen erstellen wir ein neues Image, das automatisch eine vorgepackte WAR-Datei von Magnolia CE herunterlädt.
Ziehen Sie zunächst die neueste Version des Magnolia-Basis-Images:
docker pull nicolasbarbe/magnolia-base
Erstellen Sie in Ihrem Projektverzeichnis ein neues Dockerfile:
FROM nicolasbarbe/magnolia-base
MAINTAINER Nicolas Barbé "https://github.com/nicolasbarbe"
ADD http://sourceforge.net/projects/magnolia/files/magnolia/Magnolia%20CE%205.3.6/magnolia-bundled-webapp-5.3.6.war/download?use_mirror=autoselect $CATALINA_BASE/webapps/ROOT.war
Bauen Sie den Container und geben Sie ihm einen Namen:
docker build -t one-author-derby .
Und starten Sie eine Instanz:
docker run -p 3000:8080 ein-autor-derby
Es wird eine neue Instanz des Containers one-author-derby mit einer Magnolia-Instanz erstellt, auf die über ihre URL zugegriffen werden kann: http://localhost:3000
Hinweis: Wenn Sie MacOS verwenden, müssen Sie die IP der virtuellen boot2docker-Maschine (boot2docker ip) anstelle von localhost verwenden.
Wie Sie sehen können, ist die Bereitstellung einer neuen Magnolia-Instanz mit Docker einfach.
Dieses Setup hat jedoch einige Einschränkungen - Wie bleiben die Daten erhalten, wenn der Container neu gestartet wird? Wie kann ich meine Docker-Images in meinen Build-Prozess integrieren? Wie kann ich mehrere Magnolia-Instanzen bereitstellen? Ich werde diese Fragen demnächst in einem anderen Beitrag beantworten! Bleiben Sie dran!
The source code of the example is available here.