Mit Docker-Containern können Sie schnell neue Anwendungen erstellen, ohne Ihr System mit Abhängigkeiten zu verschmutzen. Eine MySQL-Datenbank ist eine gängige Voraussetzung für webbasierte Software. So bringen Sie in nur wenigen Minuten eine neue MySQL-Instanz in Docker zum Laufen.
Erste Schritte
Das offizielle MySQL-Image auf Docker Hub bietet alles, was Sie für den Einstieg benötigen. Images sind für die MySQL-Versionen 5.6, 5.7 und 8.0 verfügbar. Geben Sie das an, das Sie als Bild-Tag verwenden möchten:
docker pull mysql:8.0
Vor der Bereitstellung müssen Sie ein Docker-Volume oder einen Bind-Mount einrichten, um Ihre Datenbank dauerhaft zu speichern. Andernfalls gehen Ihre Daten verloren, wenn der Container neu gestartet wird. Der Mount sollte nach /var/lib/mysql
erfolgen innerhalb des Containers.
Sie müssen auch ein Passwort für den MySQL-Root-Benutzer festlegen. Verwenden Sie das MYSQL_ROOT_PASSWORD
Umgebungsvariable. MySQL verweigert die Initialisierung, wenn diese Variable nicht gesetzt ist. Versuchen Sie, ein sicheres Passwort zu wählen.
So führen Sie MySQL aus, während Sie diese Voraussetzungen erfüllen:
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0
Die Erstausführungsroutine von MySQL dauert einige Sekunden. Sie können überprüfen, ob die Datenbank aktiv ist, indem Sie docker logs my-mysql
ausführen . Suchen Sie nach einer Zeile, die ready for connections
enthält .
VERBINDUNG: Verwendung von Docker zur Containerisierung von PHP und Apache
Docker Compose
Der docker run
Der Befehl kann schnell langwierig werden, insbesondere wenn Sie komplexe Konfigurationsanforderungen haben. Schreiben einer docker-compose.yml
Datei ist wartungsfreundlicher. Hier ist ein Beispiel:
version: "3"
services:
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
Sie können MySQL mit MYSQL_ROOT_PASSWORD=secure docker-compose up -d
starten .
VERBINDUNG: So installieren Sie Docker und Docker Compose unter Linux
Mit MySQL verbinden
Sie können eine interaktive MySQL-Shell erhalten, indem Sie sie an den Container anhängen und mysql
ausführen Befehl. Dies stellt die vollständige MySQL-Befehlszeilenschnittstelle bereit, sodass Sie alle vertrauten Befehle und Flags verwenden können.
docker exec -it my-mysql mysql -p
Dieser Befehl öffnet eine Shell als Root-Benutzer und fordert zur Eingabe eines Passworts auf.
Um eine SQL-Datei aus Ihrem Dateisystem zu importieren, können Sie sie in den Befehl leiten:
docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql
Sie müssen eine Portbindung einrichten, wenn Sie von Ihrem Host aus auf MySQL zugreifen möchten. Binden Sie einen Host-Port an den Port 3306 des Containers. Fügen Sie Folgendes zu Ihrer docker-compose.yml
hinzu Datei innerhalb der mysql
Dienstdefinition:
ports:
- 33060:3306
Dadurch wird Port 33060 auf Ihrem Hostcomputer an Port 3306 des Containers gebunden. Wenn Sie Docker Compose nicht verwenden, übergeben Sie -p 33060:3306
zu docker run
wenn Sie Ihren Container starten. Sie können sich jetzt mit localhost:33060
verbinden Verwenden von MySQL-Clients, die auf Ihrem Host ausgeführt werden.
Wenn Sie sich von einem anderen verbinden müssen Docker-Container verwenden Sie am besten Docker Compose. Definieren Sie einen anderen Dienst für den neuen Container. Beide Container befinden sich im selben Docker-Netzwerk. Sie können eine Verbindung über Port 3306 auf dem Hostnamen des MySQL-Containers herstellen (dieser stimmt mit dem in Ihrer Compose-Datei definierten Dienstnamen überein).
Automatisches Erstellen einer Datenbank und eines Benutzers
Die MySQL-Docker-Images unterstützen optionale Umgebungsvariablen, mit denen Sie die Einrichtung der Datenbank bei der ersten Ausführung verwalten können. Legen Sie diese Variablen fest, um automatisch eine neue leere Datenbank und ein neues Benutzerkonto bereitzustellen:
MYSQL_DATABASE
– Der Name eines Datenbankschemas, das erstellt werden soll, wenn der Server zum ersten Mal initialisiert wird.MYSQL_USER
undMYSQL_PASSWORD
– Erstellen Sie ein neues anfängliches Benutzerkonto, getrennt vomroot
Benutzer. Wenn Sie auch dieMYSQL_DATABASE
setzen Variable wird Ihr neues Benutzerkonto automatisch alle Berechtigungen für die neu erstellte Datenbank erhalten.MYSQL_RANDOM_ROOT_PASSWORD
– Setzen Sie diese Variable, damit MySQL automatisch ein neues Passwort fürroot
generiert Benutzer. Dies ersetzt dasMYSQL_ROOT_PASSWORD
Variable. Das generierte Passwort wird bei der ersten Ausführung an den Standardausgabestream ausgegeben. Aus diesem Grund sollten Sie bei der Verwendung dieser Variable in CI-Umgebungen vorsichtig sein – das Passwort kann für jeden sichtbar sein, der Zugriff auf die Jobprotokolle hat!
Seed-Dateien für die erste Ausführung
Sie haben oft Tabellen und Daten, die Sie direkt nach der Erstellung in die Datenbank einspeisen möchten. Die MySQL-Images sind so konfiguriert, dass sie nach .sh
suchen , .sql
und .sql.gz
Dateien in /docker-entrypoint-initdb.d
des Containers Verzeichnis.
Alle gefundenen Dateien werden nacheinander ausgeführt. Die Reihenfolge ist immer alphabetisch. Sie können Dateinamenpräfixe anwenden (z. B. 1-seed_tables.sql
/ 2-seed_data.sql
), um sicherzustellen, dass die Vorgänge in der vorgesehenen Reihenfolge abgeschlossen werden.
Mit diesem Mechanismus können Sie Ihre neue Datenbankinstanz ganz einfach mit Anfangsdaten impfen. Sie können Ihre eigene Docker-Datei schreiben, indem Sie MySQL als Basis-Image verwenden, und Ihre Seed-Dateien in /docker-entrypoint-initdb.d
hinzufügen . Alternativ können Sie ein Verzeichnis auf Ihrem Host in das Containerverzeichnis binden.
MySQL ignoriert Initialisierungsdateien, es sei denn, es gibt keine Datenbank im Datenverzeichnis. Das Löschen des Inhalts Ihres Datenverzeichnisses löst eine neue Initialisierung aus, wenn Sie den Container neu starten.
Servereinstellungen anpassen
MySQL-Server-Konfigurationsdateien werden aus /etc/mysql/conf.d
geladen . Fügen Sie diesem Verzeichnis mithilfe einer Dockerfile-Überschreibung oder eines Bind-Mounts Ihre eigenen Konfigurationsdateien hinzu, um die Servereinstellungen anzupassen. Die Liste der verfügbaren Optionen finden Sie im MySQL-Server-Handbuch.
Die Verwendung einer Optionsdatei erleichtert das zukünftige Anzeigen und Bearbeiten Ihrer Konfiguration. Sie checken Ihre Datei zusammen mit Ihrem Projekt in die Versionskontrolle ein. Es sind jedoch auch Befehlszeilen-Flags für einmalige Anpassungen und Experimente verfügbar.
docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --general-log=on
Diese Variante von docker run
startet MySQL mit aktiviertem allgemeinem Abfrageprotokoll. Die mysql
Binär ist der Einstiegspunkt des Bildes, also werden Flags an docker run
übergeben danach wird der Bildname an mysql
weitergeleitet .
Schlussfolgerung
Das Ausführen von MySQL in Docker ist viel schneller und einfacher als die Installation von MySQL Server „Bare-Metal“. Sie können mehrere MySQL-Instanzen ohne das Risiko von Konflikten ausführen.
Die offiziellen Docker-Images verfügen über nützliche Konfigurationsoptionen und integrierte Unterstützung für First-Run-Datenbank-Seeds. So können Sie schnell loslegen, egal ob Sie bei Null anfangen oder ein vorhandenes Schema verwenden.
VERBINDUNG: WordPress schnell als Docker-Container bereitstellen