Morten Green Hermansen Morten Green Hermansen - 5 months ago 59
MySQL Question

How to create populated MySQL Docker Image on build time

I would like to create a MySQL Docker image with data already populated.

I want to create 3 layers like this:

Layer 3 | Customer 1 Database | Customer 2 Database |
Layer 2 | Database image with tables but no data |
Layer 1 | mysql:5.6.26 |

My question is now how to create a correct Dockerfile for layer 2 and 3?
Where my empty_with_tables.sql file is loaded into layer 2 and customer1.sql and customer2.sql is loaded into two images in layer 3. I read something about putting SQL files into '/docker-entrypoint-initdb.d'. But this would result in the data being when the image is started for the first time. This not what I want. I want the data to be ready in the image (for example to be quickly available in testing).

I could start the mysql image, load the data from commandline and do a 'commit' but this is not reproducible, requiring doing that again when data in the SQL files are changed.

How can this be done?

Best regards,

  • Morten Green Hermansen


So my solution to this problem was just NOT to layer everything but create a base image and use --volumes-from to inject the database files from a data-only container.