Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare un'immagine MySQL Docker popolata in fase di compilazione

Ho riscontrato lo stesso problema questa settimana. Ho trovato una soluzione funzionante senza la necessità di --volumes-from

Il problema già affermato è che /var/lib/mysql è un volume e poiché Docker non supporterà UNVOLUME nel suo Dockerfile nel prossimo futuro, non è possibile utilizzare questa posizione per l'archiviazione del database se si desidera iniziare con un database vuoto per impostazione predefinita. (https://github.com/docker/docker/issues/18287 ). Ecco perché sovrascrivo etc/mysqld.my.cnf , dando a mysql una nuova datadir.

Insieme alla sua risposta di pwe, puoi creare un Dockerile come questo:

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

L'unico cambiamento è in my.cnf è la posizione della directory dei dati:

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