Mysql
 sql >> Database >  >> RDS >> Mysql

docker commit mysql non salva

Qui accadono diverse cose:

Innanzitutto, docker commit è un odore di codice. Tende ad essere utilizzato da coloro che creano immagini con un processo manuale, piuttosto che automatizzare le loro build con un Dockerfile che consentirebbe una facile ricreazione. Se possibile, ti consiglio di passare a un Dockerfile per la creazione dell'immagine.

Successivamente, un docker commit non acquisirà le modifiche apportate a un volume. E questo stesso problema si verifica se tenti di aggiornare un volume con un RUN entrare in un Dockerfile. Entrambi acquisiscono le modifiche al file system del contenitore e memorizzano tali modifiche come un livello nell'immagine della finestra mobile e i volumi non fanno parte del file system del contenitore. Questo è visibile anche se esegui docker diff contro un contenitore. In questo caso, l'immagine a monte ha definito il volume nel proprio Dockerfile:

VOLUME /var/lib/mysql

E Docker non ha un comando per annullare un volume creato dal Dockerfile. Dovresti modificare direttamente la definizione dell'immagine dall'esterno della finestra mobile (non consigliato) o creare la tua immagine upstream con quel passaggio rimosso (consigliato).

Ciò che l'immagine mysql fornisce è la possibilità di inserire i propri script di creazione del database in /docker-entrypoint-initdb.d , che puoi aggiungere con la tua immagine che estende mysql o montare come volume. Qui è dove inseriresti il ​​tuo schema o inizializzeresti da un backup noto per lo sviluppo.

Infine, se l'obiettivo è avere la persistenza, dovresti archiviare i tuoi dati in un volume, non impegnando contenitori:

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

Il volume ti consente di ricreare il contenitore, aggiornare a una versione più recente di mysql quando vengono rilasciate le patch (ad es. correzioni di sicurezza) senza perdere i tuoi dati.

Per eseguire il backup del volume, questo verrà esportato in un tgz:

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

E per ripristinare un volume, questo ne crea uno da un tgz:

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