Trick 17: Einfacher SQL-Import mit Docker

Hier ein schneller Tipp, der gerade im Zusammenhang mit Legacy-Applikationen helfen kann, bei denen man einen SQL-Dump beim Starten des MySQL-Containers auch gleich importiert haben möchte.

In meiner docker-compose.yml nutze ich das offizielle MariaDB-Image. Mit dem MySQL-Image funktioniert das aber genauso. Man achte auf die letzte Zeile. Dort wird mittels Host-Mount ein SQL-Dump aus dem Projekt-Verzeichnis innerhalb des Containers, im Ordner /docker-entrypoint-initdb.d, verfügbar gemacht.

version: "3.7"

services:
  db:
    image: mariadb:10.4
    environment:
      MYSQL_ROOT_PASSWORD: myrootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    ports:
      - 3306:3306
    volumes:
      - ./sql/dump.sql:/docker-entrypoint-initdb.d/dump.sql

Mit docker-compose up wird nun der Dienst gestartet und der SQL-Dump in die angegebene Datenbank importiert. Wer die Magie verstehen möchte, muss nur einen Blick in die als ENTRYPOINT hinterlegte Datei docker-entrypoint.sh des Images werfen. Dort wird nämlich innerhalb des Ordners nach Dateien mit den Endungen .sh, .sql und .sql.gz geschaut und diese ausgeführt, bzw. importiert. Möglich ist somit auch das Importieren mehrerer SQL-Dumps, indem man den gesamten Ordner mountet.

Bild von Ian Battaglia