Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer une image MySQL Docker peuplée au moment de la construction

J'ai rencontré le même problème cette semaine. J'ai trouvé une solution de travail sans avoir besoin de --volumes-from

Le problème déjà mentionné est que /var/lib/mysql est un volume, et puisque Docker ne prendra pas en charge UNVOLUME dans son Dockerfile dans un avenir proche, vous ne pouvez pas utiliser cet emplacement pour le stockage de votre base de données si vous souhaitez commencer avec une base de données vide par défaut. (https://github.com/docker/docker/issues/18287 ). C'est pourquoi j'écrase etc/mysqld.my.cnf , donnant à mysql un nouveau répertoire de données.

Avec la réponse de pwes, vous pouvez créer un Dockerile comme celui-ci :

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

Le seul changement est dans my.cnf est l'emplacement du datadir :

.... 
[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
....