Der sker flere ting her:
Først docker commit
er en kode lugt. Det plejer at blive brugt af dem, der laver billeder med en manuel proces, snarere end at automatisere deres builds med en Dockerfile, der ville give mulighed for nem genskabelse. Hvis det overhovedet er muligt, anbefaler jeg, at du skifter til en Dockerfile til din billedoprettelse.
Dernæst en docker commit
vil ikke fange ændringer foretaget på en volumen. Og det samme problem opstår, hvis du forsøger at opdatere en diskenhed med en RUN
trin i en Dockerfile. Begge disse fanger ændringer til containerfilsystemet og gemmer disse ændringer som et lag i docker-billedet, og volumerne er ikke en del af containerfilsystemet. Dette er også synligt, hvis du kører docker diff
mod en container. I dette tilfælde har upstream-billedet defineret volumen i deres Dockerfile:
VOLUME /var/lib/mysql
Og docker har ikke en kommando til at fortryde en oprettet volumen fra Dockerfilen. Du skal enten ændre billeddefinitionen direkte uden for docker (anbefales ikke) eller bygge dit eget upstream-billede med dette trin fjernet (anbefales).
Hvad mysql-billedet giver, er muligheden for at injicere dine egne databaseoprettelsesscripts i /docker-entrypoint-initdb.d
, som du kan tilføje med dit eget billede, der udvider mysql, eller montere som et volumen. Det er her du vil injicere dit skema eller initialisere fra en kendt backup til udvikling.
Til sidst, hvis målet er at have persistens, bør du gemme dine data i en volumen, ikke ved at forpligte containere:
docker run -v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
Volumen giver dig mulighed for at genskabe containeren, opgradere til en nyere version af mysql, når patches frigives (f.eks. sikkerhedsrettelser) uden at miste dine data.
For at sikkerhedskopiere volumen vil dette eksportere til en tgz:
docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz
Og for at gendanne en volumen, opretter dette en fra en tgz:
docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz