MySQL (и варианти като Percona Server) предоставят възможност за засяване на база данни при първото стартиране на контейнера, описано в раздела „Инициализиране на нов екземпляр“ в страницата на docker hub .
Dockerfile, използващ тази техника, ще изглежда така
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
Забележка:крайната наклонена черта на директорията е важна.
Когато docker run
това изображение, docker ще създаде контейнера, 0. -входна точка.ш
ще изпълни sql скрипта и след това контейнерът ще бъде готов да обслужва данни.
Данните ще се запазят чрез рестартиране на контейнера - началните данни и последващи модификации.
Можете да използвате повторно контейнера за по-бързо стартиране - следващите стартирания на контейнера няма да трябва да инициализират базата данни или да зареждат данните. Когато имате нужда от чисти данни, изтрийте контейнера и docker run
изображението отново.
Когато изтриете контейнера, не забравяйте да изтриете тома на docker, съдържащ db данните:docker rm -v $CONTAINER_NAME
.
Използвам този метод, за да предоставя стандартни данни за езикови/рамкови POC, както и CI/CD. Инициализирането на нова база данни и засаждането на големи количества данни може да отнеме няколко минути, така че ще ви е необходима логика, за да поставите на пауза автоматизираните операции, докато не можете успешно да осъществите db връзка.
Надявам се това да ви помогне по пътя.