GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So führen Sie MySQL in einem Docker-Container aus

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 und MYSQL_PASSWORD – Erstellen Sie ein neues anfängliches Benutzerkonto, getrennt vom root Benutzer. Wenn Sie auch die MYSQL_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ür root generiert Benutzer. Dies ersetzt das MYSQL_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


Docker
  1. So führen Sie MySQL im Docker-Container aus:Eine einfache, leicht verständliche Anleitung

  2. Wie führe ich ein Programm in einem Docker-Container aus?

  3. Wie man SSH in einen Docker-Container einfügt

  4. So führen Sie einen Befehl in einem laufenden Docker-Container aus

  5. So weisen Sie einem Docker-Container eine statische IP zu

So führen Sie den ELK-Stack im Docker-Container aus

Wie man SSH in einen Docker-Container einfügt und Befehle ausführt

So führen Sie eine .NET-App in Docker aus

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So führen Sie Docker-Container aus