Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erstellen Sie ein gefülltes MySQL-Docker-Image zur Build-Zeit

Ich bin diese Woche auf das gleiche Problem gestoßen. Ich habe eine funktionierende Lösung ohne die Notwendigkeit von --volumes-from gefunden

Das bereits erwähnte Problem ist, dass /var/lib/mysql ein Volume ist, und da Docker UNVOLUME nicht unterstützen wird in der nahen Zukunft in seinem Dockerfile können Sie diesen Speicherort nicht für Ihren Datenbankspeicher verwenden, wenn Sie standardmäßig mit einer leeren Datenbank beginnen möchten. (https://github.com/docker/docker/issues/18287 ). Deshalb überschreibe ich etc/mysqld.my.cnf , indem Sie mysql ein neues Datenverzeichnis geben.

Zusammen mit der Antwort von pwes können Sie ein Dockerile wie folgt erstellen:

FROM mysql:5.6

ENV MYSQL_DATABASE db
ENV MYSQL_ROOT_PASSWORD pass
COPY db.sql /docker-entrypoint-initdb.d/db.sql
COPY my.cnf /etc/mysql/my.cnf
RUN /entrypoint.sh mysqld & sleep 30 && killall mysqld
RUN rm /docker-entrypoint-initdb.d/db.sql

Die einzige Änderung gibt es in my.cnf ist der Speicherort des Datenverzeichnisses:

.... 
[mysqld]
skip-host-cache
skip-name-resolve
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql2 <-- can be anything except /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
....