sql >> Database >  >> RDS >> Mysql

docker commit mysql slaat niet op

Er gebeuren hier verschillende dingen:

Eerst, docker commit is een codegeur. Het wordt meestal gebruikt door degenen die afbeeldingen maken met een handmatig proces, in plaats van hun builds te automatiseren met een Dockerfile die gemakkelijke recreatie mogelijk zou maken. Als het enigszins mogelijk is, raad ik je aan over te stappen naar een Dockerfile voor het maken van je afbeeldingen.

Vervolgens een docker commit zal geen wijzigingen vastleggen die aan een volume zijn aangebracht. En hetzelfde probleem doet zich voor als u een volume probeert bij te werken met een RUN stap in een Dockerfile. Beide nemen wijzigingen in het containerbestandssysteem op en slaan die wijzigingen op als een laag in de docker-image, en de volumes maken geen deel uit van het containerbestandssysteem. Dit is ook zichtbaar als u docker diff . uitvoert tegen een container. In dit geval heeft de upstream-afbeelding het volume in hun Dockerfile gedefinieerd:

VOLUME /var/lib/mysql

En docker heeft geen commando om een ​​aangemaakt volume ongedaan te maken uit de Dockerfile. U moet ofwel de afbeeldingsdefinitie rechtstreeks van buiten de docker wijzigen (niet aanbevolen) of uw eigen upstream-afbeelding bouwen waarbij die stap is verwijderd (aanbevolen).

Wat de mysql-afbeelding wel biedt, is de mogelijkheid om uw eigen scripts voor het maken van databases te injecteren in /docker-entrypoint-initdb.d , die u kunt toevoegen met uw eigen afbeelding die mysql uitbreidt, of die u als een volume kunt koppelen. Dit is waar u uw schema zou injecteren, of zou initialiseren vanaf een bekende back-up voor ontwikkeling.

Ten slotte, als het doel is om persistentie te hebben, moet u uw gegevens in een volume opslaan, niet door containers te committen:

docker run -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

Met het volume kunt u de container opnieuw maken, upgraden naar een nieuwere versie van mysql wanneer patches worden uitgebracht (bijvoorbeeld beveiligingsoplossingen) zonder uw gegevens te verliezen.

Om een ​​back-up van het volume te maken, wordt dit geëxporteerd naar een tgz:

docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz

En om een ​​volume te herstellen, maakt dit er een van een tgz:

docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz



  1. Wat is de juiste syntaxis voor een Regex zoeken en vervangen met REGEXP_REPLACE in MariaDB?

  2. Hoe een opgeslagen functie op MySQL op de juiste manier in een lus te plaatsen?

  3. Mysql datetime-formaat 10 minuten toevoegen

  4. database codering probleem? Dubbele en enkele aanhalingstekens worden weergegeven met vraagtekens