Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar uma imagem do Docker MySQL preenchida em tempo de compilação


Passei pelo mesmo problema esta semana. Encontrei uma solução funcional sem a necessidade de --volumes-from

O problema que já foi declarado é que /var/lib/mysql é um volume e, como o Docker não suportará UNVOLUME em seu Dockerfile em um futuro próximo, você não poderá usar esse local para o armazenamento do banco de dados se quiser começar com um banco de dados vazio por padrão. (https://github.com/docker/docker/issues/18287 ). É por isso que sobrescrevo etc/mysqld.my.cnf , dando ao mysql um novo datadir.

Juntamente com a resposta de pwes, você pode criar um Dockerile assim:
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

A única mudança que existe está em my.cnf é a localização do 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
....