GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So erstellen Sie einen MySQL-Docker-Container zum Testen

Docker ist eine Container-Laufzeitumgebung, die es Programmen ermöglicht, in einer jailed-Umgebung ohne erforderliche externe Abhängigkeiten zu arbeiten. Container ähneln in einigen Konzepten virtuellen Maschinen, verwenden jedoch keinen Hypervisor und laufen in einer einzigen Kernel-Instanz, wobei sie die Instanz häufig mit anderen Containern teilen. Eines der Hauptmerkmale der Containerisierung ist das Fehlen externer Abhängigkeiten; Der Container enthält alle Laufzeitbibliotheken und Komponenten, die zum Ausführen der Anwendung erforderlich sind.

Oracle stellt Docker-Container-Images seit MySQL 5.5.40 bereit und macht Docker damit zu einer ausgezeichneten Wahl für die Durchführung von Tests über mehrere MySQL-Versionen und -Releases hinweg. Oft ist es wünschenswert, Regressionstests eines Fehlers durchzuführen, um festzustellen, welche Version(en) der Fehler betrifft, oder um zu quantifizieren, wie sich das Verhalten zwischen den Versionen geändert hat.

Docker ermöglicht ein relativ einfaches Starten von MySQL-Instanzen mit einer automatischen Bereinigungsfunktion, sobald die Tests abgeschlossen sind. In diesem Beitrag werde ich einige Möglichkeiten demonstrieren, wie Sie Docker verwenden können, um MySQL zu starten und zum Testen zu verwenden.

Bevor Sie Docker verwenden können, muss es auf Ihrem Testcomputer installiert werden. Wenn Sie keinen direkten Zugriff auf ein Linux-System haben, empfehle ich Ihnen, VirtualBox zu erwerben und eine virtuelle Linux-Maschine zum Ausführen von Docker-Images zu erstellen. Eine gute Wahl für das Betriebssystem wäre CentOS 7 oder Fedora (neu). Fedora kann als Upstream zu den Enterprise-Linux-Varianten betrachtet werden und wird daher garantiert die neueste Unterstützung für Technologien haben.

Installation

1. Auf Systemen mit YUM oder DNF und Zugriff auf die Betriebssystem-Repositories können Sie Docker mit diesem Befehl installieren:

# yum install docker docker-common

Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie von YUM aufgefordert werden, Docker und alle erforderlichen Abhängigkeiten zu installieren.

2. Um Docker zu verwenden, müssen Sie als nächstes den Dienst starten:

# service docker start

Verwenden Sie bei CentOS/RHEL 7-Distributionen systemctl:

# systemct start docker

3. Wenn Docker nach jedem Neustart verfügbar sein soll, aktivieren Sie es mit diesem Befehl:

# chkconfig docker on

Verwenden Sie bei CentOS/RHEL 7-Distributionen systemctl:

# systemct enable docker

So funktioniert Docker

Docker selbst ist nur ein Container-Manager. Um Docker effektiv nutzen zu können, benötigen Sie Zugriff auf docker.io, die Website, auf der Docker-Container-Images veröffentlicht und heruntergeladen werden können. Die Docker-Container auf docker.io enthalten ein Image der MySQL-Binärdateien und Abhängigkeitsinformationen, sodass der Docker-Dienst die entsprechenden Laufzeitdateien und das virtuelle Dateisystem herunterladen kann, damit der Docker-Container darin ausgeführt werden kann.

Wenn Sie eine Docker-Containerinstanz erstellen, weist sie dem Container ein virtuelles Dateisystem zu, das über Läufe hinweg persistent ist (es sei denn, Sie verwenden die –rm Schalter). Sie können Docker-Container nach Belieben starten und stoppen, und sie bleiben über Neustarts hinweg bestehen. Eine der Funktionen von Docker, die es besonders praktisch für Testinstanzen machen, ist die Möglichkeit, den Container nach dem Stoppen zu löschen. Wenn Sie einen Docker-Container mit der Option –rm starten, wird er beim Herunterfahren des Containers auch aus dem Dateisystem gelöscht und hilft, Cruft zu beseitigen.

Container erstellen und starten

Hier ist der einfachste Befehl zum Starten der neuesten MySQL-Version in einem Container und zum Entfernen nach dem Herunterfahren:

# docker run --rm --name=mysql8 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:latest

Hier ist die Dekodierung dieses Befehls:

  • Docker – Docker ist der ausführbare Name, der verwendet wird, um alle Docker-Funktionen auszuführen.
  • laufen – Dies ist ein Befehl, der Docker gegeben wird, er weist Docker an, einen neuen Container zu erstellen und ihn auszuführen.
  • –rm – Dies weist Docker an, die Containerdateien zu entfernen, nachdem es gestoppt wurde.
  • –name=mysql8 – Dies weist Docker an, den Container „mysql8“ für alle zukünftigen Befehlsreferenzen zu benennen. Dieser Name ist willkürlich, sollte aber aussagekräftig sein, um Konflikte mit mehreren Containerinstanzen zu vermeiden.
  • -e MYSQL_ALLOW_EMPTY_PASSWORD – Dies übergibt während der Erstellungsphase eine Option an den Container, die den Container anweist, während des Erstellungsprozesses ein leeres Root-Passwort zuzuweisen.
  • -d mysql/mysql-server:latest – Dies teilt Docker das Repository und die Version mit, die beim Erstellen des Containers von docker.io heruntergeladen werden sollen. Das Wort „neueste“ ist eine magische Version, die Docker anweist, die neueste Version aller MySQL-Releases herunterzuladen, Sie können auch genaue Versionsnummern angeben.

Einige der nützlichen Änderungen des obigen Befehls könnten darin bestehen, eine MySQL-Version anzugeben oder ihr einen eindeutigen Namen zu geben. Hier ist ein Beispiel, in dem MySQL 8.0.13 angegeben und ein ähnlich eindeutiger Name verwendet wird:

# docker run --rm --name=mysql8013 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:8.0.13

Sie können sogar MySQL 5.5-Instanzen auf diese Weise abrufen:

docker run --rm --name=mysql55 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:5.5
Hinweis :Die obigen Beispiele ignorieren aus Gründen der Zweckmäßigkeit und Bequemlichkeit ABSICHTLICH jegliche Sicherheit. Verwenden oder replizieren Sie diese Konfigurationen NICHT in einer Produktionsumgebung, sie sind NICHT sicher!

Verwendung der Docker-Instanz

Bisher haben wir nur das Starten der Docker-Instanz besprochen, aber ohne Client-Programmzugriff ist es nicht sehr nützlich. Das Herstellen von Verbindungen mit den standardmäßigen MySQL-Clientprogrammen ist ziemlich einfach, da sie lokale Socket-Verbindungen verwenden und eine Verbindung über localhost herstellen. Wenn Sie eine Verbindung über eine Netzwerk-IP herstellen möchten, z. B. mit MySQL Workbench, ist es etwas komplizierter.

Hier ist ein Beispiel für eine lokale MySQL-CLI-Verbindung:

# docker exec -it mysql8 mysql -uroot

Lassen Sie uns diesen Befehl aufschlüsseln:

  • exe – weist Docker an, einen Befehl innerhalb einer Docker-Container-Instanz auszuführen.
  • -es – weist Docker an, eine interaktive Sitzung mit einem Pseudo-TTY zu erstellen.
  • mysql8 – teilt Docker mit, dass der Befehl in der Containerinstanz namens „mysql8“ ausgeführt wird.
  • mysql -uroot – Dies ist die eigentliche Raw-Shell-Befehlszeile, die Docker innerhalb der Containerinstanz ausführt.

Die MySQL-Docker-Container enthalten die MySQL-Befehlszeilen-Dienstprogramme wie mysql, mysqlpump, mysqldump usw. Wenn Sie Daten in eines der Befehlszeilen-Tools leiten möchten, z. B. zum Laden eines Dumps, müssen Sie die - t von der Befehlszeile, wie folgt:

# docker exec -i mysql8 mysql -uroot < dumpfile.sql

TCP/IP-Zugriff auf Docker-Container

Mit den obigen Beispielbefehlen weist Docker Containern nicht routingfähige private IP-Adressen zu und erstellt eine virtuelle Netzwerkschnittstelle auf Ihrem System. Die virtuelle Schnittstelle und der Container bilden die Endpunkte für die Herstellung von TCP/IP-Verbindungen zu dem im Container ausgeführten Dienst.

Um die IP-Adresse Ihrer virtuellen Netzwerkschnittstelle auf Ihrem Linux-Computer herauszufinden, führen Sie diesen Befehl aus:

shell> ip addr show docker0

8: docker0:  mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:f7:98:c4:d1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:f7ff:fe98:c4d1/64 scope link
valid_lft forever preferred_lft forever

Im obigen Beispiel sehen Sie, dass die meiner virtuellen Docker-Schnittstelle zugewiesene IP-Adresse 172.17.0.1 ist, dies ist der Endpunkt, von dem Ihre Client-Anwendung eine Verbindung herstellt; Dies ist die IP-Adresse, die Sie verwenden, um einen Benutzer in MySQL zu erstellen.

Um die Ihrer Containerinstanz zugewiesene IP-Adresse zu ermitteln, führen Sie diesen Befehl aus und ersetzen Sie im Beispiel „mysql“ durch Ihren Instanznamen:

shell> docker inspect mysql8 | grep IPAddress

"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

In der obigen Ausgabe lautet die IP-Adresse der Containerinstanz 172.17.0.2, sodass die Endpunkte 172.17.0.1 <-> 172.17.0.2 sind. Als nächstes müssen wir einen Benutzer erstellen, mit dem sich das Client-Programm verbinden kann, andernfalls erhalten Sie eine Ablehnung, da 172.17.0.1 kein zulässiger Host ist.

shell> docker exec -it mysql8 mysql -uroot

mysql> create user [email protected] identified by '';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to [email protected] with grant option;
Query OK, 0 rows affected (0.01 sec)

Nachdem Sie den Netzwerkbenutzer erstellt haben, können Sie sich als Root ohne Passwort mit Ihrer Container-Instance verbinden. Das Netzwerk 172.17.0.0/16 ist ein nicht routingfähiges privates Netzwerk, auf das von außerhalb Ihres Computers nicht zugegriffen werden kann, sodass keine Gefahr besteht, dass jemand von außen auf Ihren Docker-Container zugreift.

Herunterfahren und Aufräumen

Nachdem Sie die Tests abgeschlossen haben, müssen Sie die Docker-Instanz herunterfahren und die Dateien bereinigen, wenn Sie beim Starten nicht --rm verwendet haben.

So fahren Sie eine Docker-Instanz herunter:

# docker stop mysql8

So entfernen Sie die Instanz:

# docker rm mysql8

Schlussfolgerung

Hoffentlich habe ich die Nützlichkeit von Docker-Containern zum Testen und für die Sandbox-Nutzung veranschaulicht. Docker hat das Potenzial, Ihren Workflow zu verändern und Regressionstests schnell, einfach und bequem zu machen. Der Docker-Hub enthält Images für Version 5.5.40 und höher.


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

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

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

  4. So beenden Sie einen Docker-Container

  5. So ändern Sie die Zeitzone für einen Docker-Container

Docker lernen:So erstellen Sie einen Docker-Container

So installieren Sie Docker unter Debian 11

Wie man eine Datenbank in MySQL erstellt

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

So erstellen Sie ein Docker-Image aus einem laufenden Container

So erstellen Sie einen Django-Docker-Anwendungscontainer