Necesito crear un contenedor con una base de datos existente y realizar algunas acciones en él antes de distribuirlo. En producción, tengo algunas bases de datos realmente grandes:
[root]# ls /home/db-backup/test/prepare/26_06_2020/full/ ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema my_existing_database1 my_existing_database2 my_existing_database3 Solo necesito publicar un contenedor con my_existing_database1 para mi equipo.
Probé muchos Dockerfile pero no puedo encontrar la manera de hacerlo y no entiendo por qué. Aquí un Dockerfile simplificado:
FROM mariadb:latest as builder ENV MYSQL_ALLOW_EMPTY_PASSWORD yes # for easier debug, i will remove that in prod RUN sed -i '/\[mysqld\]/a plugin-load-add = auth_socket.so' /etc/mysql/my.cnf WORKDIR /initialized-db COPY ibdata1 . COPY mysql ./mysql COPY performance_schema ./performance_schema COPY my_existing_database1 ./my_existing_database1 COPY db-init.sh /docker-entrypoint-initdb.d/ RUN chown mysql:mysql . \ && chmod 660 ibdata1 \ && chmod +x /docker-entrypoint-initdb.d/db-init.sh RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db", "--aria-log-dir-path", "/initialized-db"] # No file named test RUN ls /initialized-db/ FROM mariadb:latest COPY --from=builder /initialized-db /var/lib/mysql Como puede ver, trato de ejecutar mi script db-init.sh . Versión simplificada:
#!/bin/bash set -e -x mysql -u root -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';" touch /initialized-db/test Desafortunadamente, mi script no se ejecuta porque no se crea la test del archivo. Intento omitir /usr/local/bin/docker-entrypoint.sh con mi propio script (copiar/pegar el archivo con alguna edición) pero tampoco funciona (no se creó la test de usuario y archivo).
¿Puedes ayudarme en esto por favor?
Preferiblemente, debe montar un directorio para los datos y luego distribuirlo extra.
Si debe distribuirlo con el contenedor en sí, debería poder editar la configuración de esa base de datos para usar un directorio de datos personalizado e inicializar sus bases de datos en él con RUN y COPY .