2016-10-14 18 views
0

Ich erstelle ein Docker-Bild mit Tomcat und MySql. Ich habe eine WAR-Datei, die ich an den Tomcat schieben kann und das Docker-Bild funktioniert wie erwartet.Erstellen Sie Datenbank und Schema für mySQL in Docker

Aber die Anwendung benötigt auch eine Datenbank auf mySQL im selben Docker-Bild (da ich nicht mehrere Bilder ausführen möchte, da dies ziemlich klein ist und nur für eine Demonstration ist).

Ich benutze ein Tomcat Image als Basis und installiere mySql darauf. Das Basis-Betriebssystem ist Ubuntu.

Hier ist meine dockerfile:

#Get the base 
FROM davidcaste/debian-tomcat:tomcat8 

#Add mySql 
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 
RUN apt-get -y update 
RUN apt-get -y install wget zip gcc 
RUN { \ 
     echo mysql-community-server mysql-community-server/data-dir select ''; \ 
     echo mysql-community-server mysql-community-server/root-pass password ''; \ 
     echo mysql-community-server mysql-community-server/re-root-pass password ''; \ 
     echo mysql-community-server mysql-community-server/remove-test-db select false; \ 
    } | debconf-set-selections \ 
    && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server 

RUN /etc/init.d/mysql start 

RUN wget http://github.com/xxxx/xxxx/blob/master/xxxx/src/main/resources/sql/create-schema.sql 
RUN cp create-schema.sql /usr/ 

RUN wget http://github.com/xxxx/xxxx/blob/master/xxxx/src/main/resources/sql/metadata.sql 
RUN cp metadata.sql /usr/ 


#RUN mysql -- this gives error 
#RUN create database test; -- this gives error 

#Get the Web Application from Nexus 
RUN wget "http://mynexus:8081/nexus/service/local/artifact/maven/redirect?g=org.my&a=my-app&r=repo&e=war&v=LATEST" --content-disposition -O app.war 

#Copy the war file 
RUN cp app.war /opt/tomcat/webapps/ 

EXPOSE 8080 
CMD ["catalina.sh", "run"] 

Ohne die mySql verwandte Elemente (Datenbank erstellen usw.) die Docker Werke bauen und es läuft gut. Aber ich kann nicht verstehen, wie ich die Datenbank mit meinen Schema- und Metadaten-SQL-Dateien erstellen kann.

Antwort

2

Sie können die SQL-Befehle nach dem Start des Containers ausführen, aber nicht während der Erstellung. Eine Option wäre, den Einstiegspunkt zu überschreiben und dort zu machen. Eine andere Option wäre ein docker-compose, der zuerst den einfachen mysql-Container aufruft und danach db und schema mit einem zusätzlichen Container erstellt, der das bash-Skript ausführt. Siehe d. H. here, um eine Vorstellung davon zu bekommen. Eine andere Möglichkeit besteht darin, das SQL-bezogene Zeug als ENV-Einstellung zu übergeben, wie es in einer der Antworten im obigen Link dargestellt ist.

+0

Daumen hoch für den Docker Verfassen Vorschlag, das ist, wie ich das auch verwende. – nwinkler

Verwandte Themen