Wenn wir mit Docker einen MySQL-Container erstellen, erwarten wir manchmal, dass die Datenbank und die Tabelle automatisch erstellt werden und die Initialisierungsdaten nach dem Start des Containers automatisch eingegeben werden. Das heißt, nach dem Start des Containers können wir direkt eine Verbindung zur Datenbank im Container herstellen und die darin enthaltenen Daten verwenden. Tatsächlich unterstützt das offizielle Image von MySQL diese Funktion und führt das angegebene SQL-Skript oder Shell-Skript automatisch aus, wenn der Container gestartet wird. Werfen wir einen Blick auf die Docker-Datei des offiziellen Images von MySQL, wie unten dargestellt: ENTRYPOINT wurde gesetzt, wodurch das Skript Nachdem wir nun das Prinzip verstanden haben, wollen wir es in die Praxis umsetzen: Wenn Sie eine Disconf-Umgebung auf Docker erstellen, müssen Sie eine MySQL-Datenbank erstellen und nacheinander vier SQL-Dateien ausführen, um die Datenbank, die Tabelle und die Daten zu initialisieren. Dazu gibt es zwei Möglichkeiten:
#!/bin/bash mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF Quelle $WORK_PATH/$FILE_0; Quelle $WORK_PATH/$FILE_1; Quelle $WORK_PATH/$FILE_2; Quelle $WORK_PATH/$FILE_3; Es ist ersichtlich, dass die Shell sehr einfach ist. Melden Sie sich bei MySQL an und führen Sie die angegebene SQL-Datei aus. MYSQL_ROOT_PASSWORD, WORK_PATH, FILE_0 sind alle Umgebungsvariablen. Schauen wir uns an, wie die entsprechende Docker-Datei wie folgt geschrieben wird: # Docker-Image von disconf mysql # VERSION 0.0.1 # Autor: bolingcavalry #Das Basisimage verwendet daocloud.io/library/mysql:8 VON daocloud.io/library/mysql:8 #Autor MAINTAINER BolingCavalry <[email protected]> #Definieren Sie das Arbeitsverzeichnis ENV WORK_PATH /usr/local/work #Definieren Sie das Verzeichnis, das automatisch vom Container ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d ausgeführt wird #Definieren Sie den SQL-Dateinamen ENV FILE_0 0-init_table.sql ENV DATEI_1 1-init_data.sql ENV FILE_2 20151225.sql ENV FILE_3 20160701.sql #Definieren Sie den Shell-Dateinamen ENV INSTALL_DATA_SHELL install_data.sh #Erstellen Sie einen Ordner RUN mkdir -p $WORK_PATH #Kopieren Sie die Initialisierungsdatendatei der Datenbank in das Arbeitsverzeichnis COPY ./$FILE_0 $WORK_PATH/ KOPIEREN ./$FILE_1 $WORK_PATH/ KOPIEREN ./$FILE_2 $WORK_PATH/ KOPIEREN ./$FILE_3 $WORK_PATH/ #Legen Sie die auszuführende Shell-Datei in das Verzeichnis /docker-entrypoint-initdb.d/, und der Container führt diese Shell automatisch aus KOPIEREN ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/ #Fügen Sie der ausführbaren Datei Ausführungsberechtigungen hinzu RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL 0-init_table.sql, 1-init_data.sql, 20151225.sql, 20160701.sql sind die SQL-Dateien, die wir ausführen möchten und die beim Erstellen des Docker-Images in die Image-Datei kopiert werden. Bitte klonen Sie mein GitHub für den vollständigen Inhalt: Führen Sie dann Gehen wir zur Datenbank, um zu prüfen, ob die Daten wirklich da sind. Führen Sie Nach der Ausführung Wie Sie sehen, können Vorgänge wie Zusammenfassen Oben habe ich Ihnen gezeigt, wie Sie SQL-Anweisungen automatisch ausführen, wenn MySQL in Docker gestartet wird. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung der Front-End-Sicherheit: JavaScript-Anti-HTTP-Hijacking und XSS
>>: Analyse des allgemeinen MySQL-Abfrageprotokolls und des langsamen Abfrageprotokolls
Ich verwende hier das Ubuntu 16.04-System. Instal...
Detaillierte Analyse der Iframe-Nutzung <iframe...
1. HILFE AIDE (Advanced Intrusion Detection Envir...
Inhaltsverzeichnis Vorwort Was ist Index-Pushdown...
1. CSS-Elemente verbergen <br />In CSS gibt ...
Dieses Mal werden wir versuchen, den laufenden Co...
Tutorial-Reihe MySQL-Reihe: Grundlegende Konzepte...
empfehlen: Detailliertes Tutorial zur Registrieru...
Vorwort Ich glaube, jeder hat den Befehl top unte...
Dieser Artikel richtet sich hauptsächlich an diej...
Heute bin ich beim Entwickeln auf eine Methode ge...
Indexerweiterung: InnoDB erweitert automatisch je...
1. Problem Während der Entwicklung wird beim Einf...
Inhaltsverzeichnis Vorwort 1. Endpunkt 2. Verbind...
Ich frage mich, ob Sie wie ich ein Programmierer ...