sql >> Base de Datos >  >> RDS >> Mysql

Cómo crear una imagen MySQL Docker poblada en tiempo de compilación

Me encontré con el mismo problema esta semana. Encontré una solución que funciona sin la necesidad de --volumes-from

El problema que ya se mencionó es que /var/lib/mysql es un volumen, y dado que Docker no admitirá UNVOLUME en su Dockerfile en un futuro cercano, no puede usar esta ubicación para el almacenamiento de su base de datos si desea comenzar con una base de datos vacía de forma predeterminada. (https://github.com/docker/docker/issues/18287 ). Es por eso que sobrescribo etc/mysqld.my.cnf , dándole a mysql un nuevo directorio de datos.

Junto con la respuesta de pwes, puedes crear un Dockerile como este:

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

El único cambio que hay en my.cnf es la ubicación del 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
....