Wie man eine MySQL-Datenbank in einem Docker-Container ausführt

Die Verwendung einer lokalen containerisierten Datenbank bietet Flexibilität und vereinfacht die Einrichtung. Sie ermöglicht die enge Nachbildung von Produktionsumgebungen ohne die Komplexität traditioneller Datenbankinstallationen. Docker beschleunigt diesen Prozess und ermöglicht es, Datenbanken in isolierten Containern mit nur wenigen Befehlen zu bereitstellen, zu verwalten und zu skalieren.

In diesem Leitfaden erfahren Sie, wie Sie:

  • eine lokale containerisierte Datenbank betreiben
  • in die Shell einer containerisierten Datenbank zugreifen
  • von Ihrem Host zu einer containerisierten Datenbank eine Verbindung herstellen
  • Datenbankdaten in einem Volume speichern
  • das Labor bereinigen

Voraussetzungen

Um diesen Leitfaden zu befolgen, müssen Sie Docker installiert haben. Für Installationsanweisungen verweisen wir auf die Docker-Website.

Schritt-für-Schritt-Anleitung zur Einrichtung von containerisierten Datenbanken

1. Betreiben Sie eine lokale containerisierte Datenbank

Die meisten beliebten Datenbank-Systeme wie MySQLPostgreSQL, und MongoDBhaben offizielle Docker-Abbilder, die auf Docker Hub verfügbar sind. Diese kuratierten Abbilder folgen den Best Practices und stellen sicher, dass Sie Zugang zu den neuesten Funktionen und Sicherheitsupdates haben. 

Um loszulegen, besuchen Sie Docker Hub und suchen Sie nach der Datenbank, die Sie interessiert. Jede Abbildseite bietet detaillierte Anweisungen, wie Sie den Container starten, Ihre Einrichtung anpassen und die Datenbank so konfigurieren, dass sie Ihren Bedürfnissen entspricht. Weitere Informationen zum MySQL-Abbild, das in diesem Leitfaden bereitgestellt wird, finden Sie auf der MySQL-Abbildseite auf Docker Hub.

Um einen Datenbank-Container zu betreiben, können Sie entweder die Docker Desktop GUI oder die CLI verwenden. Um einen Container mit der CLI zu starten, führen Sie den folgenden Befehl in einem Terminal aus:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

In diesem Befehl:

  • --name my-mysql weißt dem Container den Namen my-mysql zu, damit Sie ihn einfacher referenzieren können.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw setzt das Root-Passwort für MySQL auf my-secret-pw. Ersetzen Sie my-secret-pw durch ein sicheres Passwort Ihrer Wahl.
  • -e MYSQL_DATABASE=mydb erstellt optional eine Datenbank namens mydb. Sie können mydb durch Ihren gewünschten Datenbanknamen ersetzen.
  • -d führt den Container im detached Modus aus, das bedeutet, er läuft im Hintergrund.
  • mysql:latest gibt an, dass Sie die neueste Version des MySQL-Images verwenden möchten.

Um zu überprüfen, dass Ihr Container läuft, führen Sie  docker ps in einem Terminal aus:

Shell

 

run docker ps

Sie können dies ebenfalls in der Docker Desktop-Konsole überprüfen:

2. Zugriff auf die Shell einer Containerisierten Datenbank

Wenn eine Datenbank in einem Docker-Container läuft, müssen Sie möglicherweise auf deren Shell zugreifen, um die Datenbank zu verwalten, Befehle auszuführen oder administrative Aufgaben zu erledigen. Docker bietet eine einfache Methode dazu mit dem Befehl docker exec. Zusätzlich können Sie die GUI von Docker Desktop verwenden, wenn Sie eine grafische Oberfläche bevorzugen.

Falls Sie noch keinen laufenden Datenbank-Container haben, beziehen Sie sich auf Run a Local Containerized Database. Um das Terminal einer MySQL-Datenbank mithilfe der CLI zu betreten, können Sie den folgenden docker exec-Befehl verwenden.

Shell

docker exec -it my-mysql bash 

In diesem Befehl:

  • docker exec informiert Docker, dass Sie einen Befehl in einem laufenden Container ausführen möchten.
  • -it stellt sicher, dass das Terminal, auf das Sie zugreifen, interaktiv ist, sodass Sie Befehle eingeben können.
  • my-mysql ist der Name Ihres MySQL-Containers. Wenn Sie Ihren Container beim Starten einen anderen Namen gegeben haben, verwenden Sie stattdessen diesen Namen.
  • Der Befehl, den Sie im Container ausführen möchten, ist bash. Er öffnet eine Bash-Shell, die es Ihnen ermöglicht, mit dem Dateisystem und den installierten Anwendungen des Containers zu interagieren.
  • Nach der Ausführung dieses Befehls erhalten Sie Zugang zur Bash-Shell innen Ihrem MySQL-Container, von wo aus Sie Ihren MySQL-Server direkt verwalten können. Sie können Exit eingeben, um zu Ihrem Terminal zurückzukehren.

Überprüfen Sie, ob der Docker-Container läuft.

Shell

 

run docker ps

Sobald Sie auf das Terminal des Containers zugegriffen haben, können Sie alle in diesem Container verfügbaren Tools ausführen. Das folgende (Bild) Beispiel zeigt das Verwenden von MySQL im Container, um die Datenbanken aufzulisten.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

Die von uns erstellte Tabelle und die in der Testtabelle gespeicherten Daten sind nur so lange persistent, bis wir denselben Container verwenden; alle Daten gehen verloren, sobald wir den Container neu erstellen oder einen neuen Container erstellen.

Sie können dies überprüfen, indem Sie den Container verlassen und dann wieder in die Container-Datenbank einloggen, um zu sehen, ob Daten vorhanden sind. Sie werden dann sehen, dass die Daten so lange in der Datenbank vorhanden sind, wie der Container läuft.

3. Verbindung zu einer Containerisierten Datenbank von Ihrem Host herstellen

Von einer auf einem Containerisierten Datenbank aus Ihrer Hostmaschine aus eine Verbindung herzustellen, beinhaltet die Zuordnung eines Ports innerhalb des Containers zu einem Port auf Ihrer Hostmaschine. Dieser Vorgang stellt sicher, dass die Datenbank im Container über das Netzwerk der Hostmaschine zugänglich ist. Für MySQL ist der Standardport 3306. Durch die Freigabe dieses Ports können Sie verschiedene Datenbank-Management-Tools oder Anwendungen auf Ihrer Hostmaschine verwenden, um mit Ihrer MySQL Datenbank zu interagieren.

Bevor Sie beginnen, müssen Sie alle Container entfernen, die Sie previously für diese Anleitung ausgeführt haben. Um einen Container zu stoppen und zu entfernen, können Sie entweder:

  • In einem Terminal docker remove --force my-mysql ausführen, um den Container namens my-mysql zu entfernen;
  • Oder, im Docker Dashboard das Löschen-Symbol neben Ihrem Container in der Containeransicht auswählen.

Als Nächstes können Sie die Docker Desktop GUI oder CLI verwenden, um den Container mit dem zugemappten Port auszuführen.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

In diesem Befehl wird -p 3307:3306 der Port 3307 auf dem Host auf Port 3306 im Container gemappt.

4. Datenbankdaten in einem Volume persistieren

Das Persistieren von Datenbankdaten in einem Docker-Volume ist notwendig, um sicherzustellen, dass Ihre Daten bei Neustarts und Entfernungen des Containers überleben. Ein Docker-Volume ermöglicht es Ihnen, Datenbankdateien außerhalb der schreibbaren Schicht des Containers zu speichern, was es möglich macht, den Container zu aktualisieren, die Basis zu wechseln und Daten zu teilen, ohne sie zu verlieren. Sie können ein Volume an Ihren Datenbankcontainer anhängen, indem Sie entweder die Docker CLI oder die Docker Desktop GUI verwenden.

Achtung: Wie previously im Abschnitt „Verbindung zu einer Containerisierten Datenbank“ durchgeführt, müssen Sie vor Beginn alle Container entfernen, die Sie previously für diese Anleitung ausgeführt haben.

Als nächstes können Sie die Docker Desktop GUI oder die CLI verwenden, um den Container mit einem Volume zu starten.

Um Ihren Datenbankcontainer mit einem angebundenen Volume zu starten, geben Sie die Option —v zu Ihrem Befehl docker run ein. Dies gibt einen Volume-Namen und den Pfad an, an dem die Datenbank ihre Daten im Container speichert. Wenn das Volume nicht existiert, erstellt Docker es automatisch für Sie.

Um einen Datenbankcontainer mit einem angebundenen Volume zu starten, stellen Sie sicher, dass die Daten persistieren. Starten Sie den Container und binden Sie das Volume an.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Dieser Befehl mountet das Volume mit dem Namen my-db-volume an das Verzeichnis /var/lib/mysql im Container.

Erstellen Sie einige Daten in der Datenbank. Verwenden Sie den Befehl docker exec, um MySQL im Container auszuführen und eine Tabelle zu erstellen.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Dieser Befehl verwendet das MySQL-Tool im Container, um eine Tabelle namens mytable mit einer Spalte namens column_name zu erstellen und schließlich einen Wert einzufügen.

Stoppen und entfernen Sie den Container. Ohne ein Volume geht die von Ihnen erstellte Tabelle verloren, wenn Sie den Container entfernen.

Shell

docker remove --force my-mysql

Starten Sie einen neuen Container mit dem angebundenen Volume. Dieses Mal müssen Sie keine Umgebungsvariablen angeben, da die Konfiguration im Volume gespeichert ist.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Stellen Sie sicher, dass die von Ihnen erstellte Tabelle immer noch existiert. Verwenden Sie dann erneut den Befehl docker exec, um MySQL im Container auszuführen.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Dieser Befehl verwendet das MySQL-Werkzeug im Container, um alle Einträge aus der Tabelle „table“ auszuwählen. Sie sollten eine Ausgabe wie die folgende sehen. 

SQL

 

column_name

value

5. Reinigung des MySQL Containers– Abbildes

Um einen Container zu entfernen, verwenden Sie den Befehl docker remove mit denContainernamen oder -IDs, die durch Leerzeichen getrennt sind. Zum Beispiel:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Schlussfolgerung

Letztendlich bietet die Verwendung von MySQL mit Docker eine tragbare, skalierbare und effiziente Lösung für das Datenbankmanagement. Die isolierten Container von Docker helfen bei der Vereinfachung der Bereitstellung, Verringerung von Kompatibilitätsproblemen und Optimierung der Ressourcennutzung. Durch die Möglichkeit einer einfachen Versionskontrolle und Umgebungsrücksetzungen unterstützt Docker eine schnelle Entwicklung und Testphase. Es ist ideal für die Verwaltung von MySQL-Datenbanken in Microservices, was deren Bereitstellung und Skalierung einfacher macht und gleichzeitig starke Leistung erhält.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container