Quiero crear una imagen acoplable sobre la mysql que ya contiene el esquema necesario para mi aplicación.
Intenté agregar líneas al Dockerfile que importará mi esquema como un archivo sql. Lo hice así (mi Dockerfile):
FROM mysql
ENV MYSQL_ROOT_PASSWORD="bagabu"
ENV MYSQL_DATABASE="imhere"
ADD imhere.sql /tmp/imhere.sql
RUN "mysql -u root --password="bagabu" imhere < /tmp/imhere.sql"
A mi entender, eso no funcionó porque la imagen del acoplador mysql no contiene un cliente mysql (el estado de mejores prácticas "no agregue cosas solo porque será bueno tenerlas") (¿estoy equivocado sobre esto?)
¿Cuál podría ser una buena manera de hacer esto? He tenido algunas cosas en mente, pero todas parecen soluciones alternativas desordenadas.
- instale el cliente mysql, haga lo que tengo que hacer con él, luego elimínelo / purgue.
- copie el binario del cliente mysql a la imagen, haga lo que tengo que hacer y luego quítelo.
- Cree el esquema en otro servidor sql y copie el archivo db directamente (esto parece muy desordenado y me parece un grupo de problemas contaminados)
¿Alguna sugerencia? Con suerte, de una manera que sea fácil de mantener más tarde y tal vez también se ajuste a las mejores prácticas.
Respuestas:
Debe colocar su script de inicio en un directorio montado como
/docker-entrypoint-initdb.d
: consulte la sección "Inicialización de una instancia nueva" en los documentos de imagen de MySQL Docker .fuente
/docker-entrypoint-initdb.d
estaba en el host, pero en realidad está en el contenedor. Cambié elADD
comando para copiar a ese directorio y eliminé elRUN
comando. Docker construyó la imagen con éxito y la probé y funciona.Tenía que hacer esto para propósitos de prueba.
Así es como lo hice al aprovechar las imágenes reales de MySQL / MariaDB en dockerhub y la compilación de varias etapas:
Ejemplo de trabajo completo aquí: https://github.com/lindycoder/prepopulated-mysql-container-example
fuente
Créditos a @Martin Roy
Se hicieron cambios menores para trabajar para mysql ...
Content Dockerfile
Contenido setup.sql
Ejemplo de trabajo completo aquí: https://github.com/iamdvr/prepopulated-mysql-container-example
fuente
El software de administración como Ansible puede ayudarlo a automatizar una importación de mysql fácilmente sin necesidad de instalar y reinstalar un cliente. Ansible tiene excelentes funciones integradas para administrar imágenes y contenedores de Docker y bases de datos mysql.
fuente