Тук се случват няколко неща:
Първо, docker commit
е кодова миризма. Склонно е да се използва от тези, които създават изображения с ръчен процес, вместо да автоматизират своите компилации с Dockerfile, който би позволил лесно отдих. Ако е възможно, препоръчвам ви да преминете към Dockerfile за създаване на изображение.
След това a docker commit
няма да улови промените, направени в том. И същият проблем възниква, ако се опитате да актуализирате том с RUN
стъпка в Dockerfile. И двете улавят промените във файловата система на контейнера и съхраняват тези промени като слой в изображението на docker, а томовете не са част от файловата система на контейнера. Това също се вижда, ако стартирате docker diff
срещу контейнер. В този случай изображението нагоре по веригата е дефинирало обема в техния Dockerfile:
VOLUME /var/lib/mysql
И docker няма команда за отмяна на създаден том от Dockerfile. Ще трябва или директно да промените дефиницията на изображението извън Docker (не се препоръчва), или да създадете свое собствено изображение нагоре по веригата с премахната тази стъпка (препоръчително).
Това, което предоставя изображението на mysql, е възможността да инжектирате свои собствени скриптове за създаване на база данни в /docker-entrypoint-initdb.d
, който можете да добавите със свое собствено изображение, което разширява mysql, или да монтирате като том. Тук трябва да инжектирате вашата схема или да инициализирате от известен архив за разработка.
И накрая, ако целта е да имате постоянство, трябва да съхранявате данните си в том, а не чрез зареждане на контейнери:
docker run -v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
Обемът ви позволява да пресъздадете контейнера, да надстроите до по-нова версия на mysql, когато бъдат пуснати пачове (например корекции на сигурността), без да губите данните си.
За да архивирате тома, това ще експортира в tgz:
docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz
И за да възстановите том, това създава такъв от tgz:
docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz