/ / Übergabe von Tomcat-Parametern an Docker - Datenbank, Tomcat, Konfiguration, Docker, Docker-Datei

Übergabe von Tomcat-Parametern an Docker - Datenbank, Tomcat, Konfiguration, Docker, Docker-Datei

Ich bin neu bei Docker und habe eine Frage, die ichkann nicht scheinen, die Antwort auf zu finden. Ich nehme ein Docker-Image (consol / tomcat-7.0) und habe eine Docker-Datei geschrieben, die dieses Image lädt, meine Kriegsdateien kopiert und eine server.xml mit eindeutigen Datenbankverbindungsdetails und Standardhost in ein neues Image kopiert. Wenn ich viele Container mit diesem Image ausführe, wie kann jeder die gleichen War-Dateien verwenden, aber eine Verbindung zu verschiedenen Datenbanken herstellen und unterschiedliche URLs in server.xml haben? Ich erstelle derzeit das Image mithilfe der Docker-Datei mit unterschiedlichen Details, wenn ich eine neue Instanz erstellen möchte, und dies scheint eine Verschwendung zu sein.

Jedes Mal, wenn ich eine neue Instanz möchte, führe ich "build" mit dieser Docker-Datei aus:

FROM consol/tomcat-7.0:latest
MAINTAINER xxx
LABEL version="1.0"
EXPOSE 80 443
RUN mkdir /vhost/
COPY FILES /vhost/ /vhost/    # my war files - same on every instance
COPY FILES/server.xml /opt/tomcat/conf/ # my config file - different on each instance

Führen Sie dann dieses neue Image aus.

Was ist der richtige Weg, um dies zu tun?

Antworten:

4 für die Antwort № 1

Die typische Methode für Docker-Container ist die Übergabe über Umgebungsvariablen.

Erweiterung auf Eine Lösung, um den Port über die Befehlszeile zu übergeben das server.xml muss geändert werden, damit Eigenschaften von übernommen werden JAVA_OPTS

Zum Beispiel in server.xml

<GlobalNamingResources>
<Resource Name="jdbc/Addresses"
auth="Container"
type="javax.sql.Datasource"
username="auser"
password="Secret"
driverClassName="com.mysql.jdbc.Driver"
description="Global Address Database"
url="${jdbc.url}" />
</GlobalNamingResources>

Dann können Sie den Wert von übergeben ${jdbc.url} von Eigenschaften in der Befehlszeile.

JAVA_OPTS="-Djdbc.url=jdbc:mysql:mysqlhost:3306/"

Wenn Sie das Docker-Image ausführen, verwenden Sie die -e Flag zum Setzen dieser Umgebungsvariablen zur Laufzeit

$ docker run -it -e "JAVA_OPTS=-Djdbc.url=jdbc:mysql:mysqlhost:3306/" --rm myjavadockerimage /opt/tomcat/bin/deploy-and-run.sh

Optional können Sie auch a hinzufügen --add-host wenn Sie zuordnen müssen mysqlhost an eine bestimmte IP-Adresse.


1 für die Antwort № 2

Ich kann mir mindestens zwei Optionen vorstellen:

  • Wenn server.xml Umgebungsvariablen unterstützt, können Sie Datenbankverbindungsdetails über an den Container übergeben --env oder auch --env-file. Beachten Sie, dass dies bestimmte Auswirkungen auf die Sicherheit hat.
  • Eine andere Möglichkeit wäre, server.xml für eine bestimmte Instanz über in den Container zu mounten --volume.