Най-новата версия на официалния изображение на mysql docker ви позволява да импортирате данни при стартиране. Ето моя docker-compose.yml
data:
build: docker/data/.
mysql:
image: mysql
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 1234
volumes:
- ./docker/data:/docker-entrypoint-initdb.d
volumes_from:
- data
Тук имам моя data-dump.sql под docker/data
което е спрямо папката, от която се изпълнява docker-compose. Монтирам този sql файл в тази директория /docker-entrypoint-initdb.d
върху контейнера.
Ако се интересувате да видите как работи това, погледнете техния docker-entrypoint.sh
в GitHub. Те са добавили този блок, за да позволят импортиране на данни
echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
Допълнителна забележка, ако искате данните да бъдат запазени дори след като mysql контейнерът е спрян и премахнат, трябва да имате отделен контейнер за данни, както виждате в docker-compose.yml. Съдържанието на контейнера за данни Dockerfile е много просто.
FROM n3ziniuka5/ubuntu-oracle-jdk:14.04-JDK8
VOLUME /var/lib/mysql
CMD ["true"]
Контейнерът с данни дори не трябва да е в начално състояние за постоянство.