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.