Ich möchte ein Docker-Image über dem MySQL-Image erstellen, das bereits das für meine App erforderliche Schema enthält.
Ich habe versucht, der Docker-Datei Zeilen hinzuzufügen, die mein Schema als SQL-Datei importieren. Ich habe es so gemacht (meine 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"
Meines Erachtens hat das nicht funktioniert, weil das MySQL-Docker-Image keinen MySQL-Client enthält (Best Practices lauten: "Fügen Sie keine Dinge hinzu, nur weil sie nett sind") (irre ich mich dabei?)
Was könnte ein guter Weg sein, dies zu tun? Ich habe ein paar Dinge im Sinn gehabt, aber sie scheinen alle chaotisch zu sein.
- Installieren Sie den MySQL-Client, tun Sie, was ich damit zu tun habe, und entfernen / bereinigen Sie ihn dann.
- Kopieren Sie die MySQL-Client-Binärdatei in das Image, tun Sie, was ich tun muss, und entfernen Sie sie dann.
- Erstellen Sie das Schema in einem anderen SQL-Server und kopieren Sie die Datenbankdatei direkt selbst (dies scheint sehr chaotisch zu sein und klingt für mich wie ein verseuchter Pool von Problemen).
Irgendwelche Vorschläge? Hoffentlich auf eine Weise, die später einfach zu warten ist und möglicherweise auch den Best Practices entspricht?
Antworten:
Sie sollten Ihr Init-Skript in einem Verzeichnis ablegen, das wie
/docker-entrypoint-initdb.d
folgt eingebunden ist: Siehe Abschnitt "Initialisieren einer neuen Instanz" in den MySQL Docker-Image-Dokumenten .quelle
/docker-entrypoint-initdb.d
war im Host, aber es ist tatsächlich im Container. Ich habe denADD
Befehl zum Kopieren in dieses Verzeichnis geändert und denRUN
Befehl entfernt. Docker hat das Image erfolgreich erstellt und ich habe es getestet und es funktioniert.Ich musste dies zu Testzwecken tun.
Hier ist, wie ich es gemacht habe, indem ich die tatsächlichen MySQL / MariaDB-Images auf dockerhub und den mehrstufigen Build verwendet habe:
Vollständiges Beispiel hier: https://github.com/lindycoder/prepopulated-mysql-container-example
quelle
Dank an @Martin Roy
Kleinere Änderungen an der Arbeit für MySQL vorgenommen ...
Content Dockerfile
Inhalt setup.sql
Vollständiges Funktionsbeispiel hier: https://github.com/iamdvr/prepopulated-mysql-container-example
quelle
Verwaltungssoftware wie Ansible kann Ihnen helfen, einen MySQL-Import einfach zu automatisieren, ohne einen Client installieren und neu installieren zu müssen. Ansible verfügt über hervorragende integrierte Funktionen zum Verwalten von Docker-Bildern und -Containern sowie von MySQL-Datenbanken.
quelle