在docker中为mySQL创建数据库和模式

时间:2016-10-14 09:10:59

标签: mysql tomcat docker database-schema

我正在用tomcat和mySql创建一个docker镜像。我有一个.war文件,我可以推送到Tomcat,docker镜像按预期工作。

但是应用程序还需要在同一个docker镜像中的mySQL上的数据库(因为我不想运行多个图像,因为它相当小,仅用于演示)。

我使用tomcat映像作为基础并在其上安装mySql。基本操作系统是Ubuntu。

这是我的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"]

没有mySql相关项(创建数据库等),docker构建工作正常,并且运行良好。但我无法理解如何使用我的架构和元数据sql文件创建数据库。

1 个答案:

答案 0 :(得分:2)

您可以在容器启动后运行SQL命令,但不能在构建它时运行。一种选择是覆盖入口点并在那里进行。另一个选择是让docker-compose首先打开普通的mysql容器,之后用另一个运行bash脚本的容器创建db和schema。 请参阅here以了解相关信息。另一种选择是将SQL相关的东西作为ENV设置传递,如上面链接中的一个答案所示。