2016-10-14 2 views
0

Я создаю изображение докера с tomcat и mySql. У меня есть файл .war, который я могу нажать на Tomcat, и изображение докеры работает так, как ожидалось.Создать базу данных и схему для mySQL в докере

Но приложение также нуждается в базе данных на 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 элементов (создание базы данных и т.д.) докер строительные работы, и она работает хорошо. Но я не могу понять, как создать базу данных, используя мои sql-файлы схемы и метаданных.

ответ

2

Вы можете запускать команды SQL после запуска контейнера, но не во время его создания. Один из вариантов - переопределить точку входа и сделать это там. Другим вариантом было бы создать компоновку докеров, сначала создав простой контейнер mysql, а затем создадим db и схему с дополнительным контейнером, который запускает скрипт bash. См., Например, here, чтобы получить представление об этом. Другой вариант - передать связанный с SQL материал как настройку ENV, как показано в одном из ответов в ссылке выше.

+0

Thumbs up for Docker Составьте предложение, вот как я это использую. – nwinkler

Смежные вопросы