Morten Green Hermansen Morten Green Hermansen - 1 month ago 8
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


Answer

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.

Comments