Heim  >  Artikel  >  Datenbank  >  Wie kann ich Datenänderungen in einem MySQL-Container festschreiben, ohne Volumes zu verwenden?

Wie kann ich Datenänderungen in einem MySQL-Container festschreiben, ohne Volumes zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 10:28:021006Durchsuche

How to Commit Data Changes in a MySQL Container Without Using Volumes?

Daten in einem MySQL-Container festschreiben

Beim Versuch, Datenbankänderungen beizubehalten, indem Sie einen geänderten MySQL-Container in einen neuen festschreiben, ist ein Problem aufgetreten Bild. Obwohl ein SQL-Dump importiert und eine neue Datenbank erstellt wurde, werden die Änderungen beim Ausführen eines Containers basierend auf dem aktualisierten Image nicht in der Datenbank widergespiegelt.

Ursache:

Das offizielle MySQL-Image nutzt ein Volume zum Speichern von Daten und gewährleistet so die Datenerhaltung über die Lebensdauer des Containers hinaus. Beim Festschreiben eines Containers mit Volumes sind die Datenänderungen jedoch nicht im resultierenden Image enthalten.

Lösung:

Um dieses Problem zu beheben, erstellen Sie Ihr eigenes benutzerdefiniertes MySQL Basis-Image, das die Verwendung von Volumes ausschließt. Dadurch werden die während des Commit-Vorgangs hinzugefügten Daten in das Bild eingebettet. Beachten Sie, dass dieser Ansatz mit einer Einschränkung verbunden ist: Nachfolgende Datenzusätze zu Containern, die aus dem festgeschriebenen Image erzeugt werden, gehen bei der Containerbeendigung verloren.

Geänderte Docker-Datei:

Die folgende Docker-Datei zeigt, wie man ein benutzerdefiniertes MySQL-Basis-Image ohne Volumes erstellt:

<code class="dockerfile">FROM mysql:latest
# Remove volume mounts
RUN rm -rf /var/lib/mysql/*</code>

Erstellen und Festschreiben des Images:

Erstellen Sie das benutzerdefinierte Basis-Image mit der geänderten Docker-Datei:

docker build -t my-custom-mysql .

Erstellen Sie einen neuen Container basierend auf dem benutzerdefinierten Image und importieren Sie den SQL-Dump:

docker run --name my-custom-mysql -d my-custom-mysql
docker exec -it my-custom-mysql bash
mysql -uroot -psecret -e 'create database liferay_psat1;'
mysql -uroot -psecret liferay_psat1 < /mnt/liferay_sql_dump.sql

Übernehmen Sie den Container als neues Image und integrieren Sie dabei die importierten Daten:

docker commit -m "Imported liferay SQL dump" <container-id> jihedamine/mysql-psat1:v2

Änderungen überprüfen:

Führen Sie einen Container mit dem aktualisierten Bild aus und überprüfen Sie den Datenbankinhalt:

docker run -ti jihedamine/mysql-psat1:v2 bash
mysql -uroot -psecret
# show databases;

Die Datenbank „liferay_psat1“ sollte jetzt vorhanden sein vorhanden und spiegelt die von Ihnen vorgenommenen Änderungen wider.

Das obige ist der detaillierte Inhalt vonWie kann ich Datenänderungen in einem MySQL-Container festschreiben, ohne Volumes zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn