La dernière version de l'image docker mysql officielle permet d'importer des données au démarrage. Voici mon 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
Ici, j'ai mon data-dump.sql sous docker/data
qui est relatif au dossier à partir duquel docker-compose s'exécute. Je monte ce fichier sql dans ce répertoire /docker-entrypoint-initdb.d
sur le conteneur.
Si vous souhaitez voir comment cela fonctionne, jetez un œil à leur docker-entrypoint.sh
dans GitHub. Ils ont ajouté ce bloc pour permettre l'importation de données
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
Une note supplémentaire, si vous souhaitez que les données soient conservées même après l'arrêt et la suppression du conteneur mysql, vous devez disposer d'un conteneur de données distinct, comme vous le voyez dans le docker-compose.yml. Le contenu du conteneur de données Dockerfile est très simple.
FROM n3ziniuka5/ubuntu-oracle-jdk:14.04-JDK8
VOLUME /var/lib/mysql
CMD ["true"]
Le conteneur de données n'a même pas besoin d'être à l'état de démarrage pour la persistance.