sql >> Databasteknik >  >> RDS >> Mysql

docker commit mysql sparar inte

Flera saker händer här:

Först, docker commit är en kodlukt. Det tenderar att användas av dem som skapar bilder med en manuell process, snarare än att automatisera sina byggen med en Dockerfile som skulle möjliggöra enkel rekreation. Om det är möjligt rekommenderar jag att du byter till en Dockerfile för att skapa bilder.

Därefter en docker commit kommer inte att fånga ändringar som gjorts i en volym. Och samma problem uppstår om du försöker uppdatera en volym med en RUN steg i en Dockerfile. Båda dessa fångar in ändringar i containerfilsystemet och lagrar dessa ändringar som ett lager i docker-bilden, och volymerna är inte en del av containerfilsystemet. Detta är också synligt om du kör docker diff mot en container. I det här fallet har uppströmsbilden definierat volymen i sin Dockerfile:

VOLUME /var/lib/mysql

Och docker har inte ett kommando för att ångra en skapad volym från Dockerfilen. Du måste antingen ändra bilddefinitionen direkt utanför docker (rekommenderas inte) eller bygga din egen uppströmsbild med det steget borttaget (rekommenderas).

Vad mysql-bilden ger är möjligheten att injicera dina egna skript för att skapa databaser i /docker-entrypoint-initdb.d , som du kan lägga till med din egen bild som utökar mysql, eller montera som en volym. Det är här du skulle injicera ditt schema, eller initialisera från en känd säkerhetskopia för utveckling.

Slutligen, om målet är att ha uthållighet, bör du lagra dina data i en volym, inte genom att commitera behållare:

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

Volymen låter dig återskapa behållaren, uppgradera till en nyare version av mysql när patchar släpps (t.ex. säkerhetskorrigeringar) utan att förlora din data.

För att säkerhetskopiera volymen kommer detta att exporteras till en tgz:

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

Och för att återställa en volym skapas en från en tgz:

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



  1. Hur får man livemeddelandeuppdateringar från mysql med hjälp av websockets?

  2. Hur man uppnår PCI-kompatibilitet för MySQL &MariaDB med ClusterControl - The Replay

  3. fel, sträng eller binär data skulle trunkeras när man försöker infoga

  4. Fatalt fel:Maximal körningstid på 30 sekunder har överskridits i C: