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_USERundMYSQL_PASSWORD– Erstellen Sie ein neues anfängliches Benutzerkonto, getrennt vomrootBenutzer. Wenn Sie auch dieMYSQL_DATABASEsetzen 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ürrootgeneriert Benutzer. Dies ersetzt dasMYSQL_ROOT_PASSWORDVariable. 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