Je veux créer une image docker au-dessus de celle de mysql qui contient déjà le schéma nécessaire pour mon application.
J'ai essayé d'ajouter des lignes au Dockerfile qui importera mon schéma en tant que fichier sql. Je l'ai fait en tant que tel (mon Dockerfile):
FROM mysql
ENV MYSQL_ROOT_PASSWORD="bagabu"
ENV MYSQL_DATABASE="imhere"
ADD imhere.sql /tmp/imhere.sql
RUN "mysql -u root --password="bagabu" imhere < /tmp/imhere.sql"
À ma connaissance, cela n'a pas fonctionné car l'image de docker mysql ne contient pas de client mysql (les meilleures pratiques indiquent "n'ajoutez pas les choses simplement parce qu'elles seront agréables à avoir") (ai-je tort à ce sujet?)
quelle pourrait être une bonne façon de procéder? J'ai pensé à plusieurs choses, mais elles semblent toutes être des solutions de contournement compliquées.
- installez le client mysql, faites ce que j'ai à faire avec, puis supprimez / purgez-le.
- copiez le binaire client mysql dans l'image, faites ce que j'ai à faire, puis supprimez-le.
- Créez le schéma dans un autre serveur sql et copiez directement le fichier db (cela semble très compliqué et me semble être un pool de problèmes contaminé)
Aucune suggestion? Si tout va bien d'une manière qui sera facile à entretenir plus tard et peut-être également conforme aux meilleures pratiques?
Réponses:
Vous devez placer votre script init dans un répertoire monté comme
/docker-entrypoint-initdb.d
- voir la section "Initialisation d'une nouvelle instance" dans la documentation de l'image MySQL Docker .la source
/docker-entrypoint-initdb.d
c'était dans l'hôte mais c'est en fait dans le conteneur. J'ai changé laADD
commande pour copier dans ce répertoire et j'ai supprimé laRUN
commande. Docker a construit l'image avec succès et je l'ai testée et cela fonctionne.J'ai dû le faire à des fins de test.
Voici comment je l'ai fait en tirant parti des images MySQL / MariaDB réelles sur dockerhub et de la construction en plusieurs étapes:
Exemple de travail complet ici: https://github.com/lindycoder/prepopulated-mysql-container-example
la source
Crédits à @Martin Roy
Modifications mineures apportées au fonctionnement de mysql ...
Contenu Dockerfile
Content setup.sql
Exemple de travail complet ici: https://github.com/iamdvr/prepopulated-mysql-container-example
la source
Un logiciel de gestion comme Ansible peut vous aider à automatiser une importation mysql facilement sans avoir à installer et réinstaller un client. Ansible a de grandes fonctionnalités intégrées pour gérer les images et les conteneurs Docker et les bases de données mysql.
la source