• 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.

Über den autor

Nicolas Barbe

former Senior Consultant at Magnolia

Nicolas is a software engineer and technology enthusiast. He brings his experience to clients who need expertise in various fields such as integration, deployment approaches, migration, site configuration or prototyping.