Considera per questa risposta:
- Il nome del database è
app_schema
- Il nome del contenitore è
app_db
- La password di root è
root123
Come aggiornare MySQL durante la memorizzazione dei dati dell'applicazione all'interno del contenitore
Questa è considerata una cattiva pratica , perché se perdi il contenitore, perderai i dati. Sebbene sia una cattiva pratica, ecco un modo possibile per farlo:
1) Eseguire un dump del database come SQL:
docker exec app_db sh -c 'exec mysqldump app_schema -uroot -proot123' > database_dump.sql
2) Aggiorna l'immagine:
docker pull mysql:5.6
3) Aggiorna il contenitore:
docker rm -f app_db
docker run --name app_db --restart unless-stopped \
-e MYSQL_ROOT_PASSWORD=root123 \
-d mysql:5.6
4) Ripristina il dump del database:
docker exec app_db sh -c 'exec mysql -uroot -proot123' < database_dump.sql
Come aggiornare il contenitore MySQL usando un volume esterno
L'uso di un volume esterno è un modo migliore di gestire i dati e semplifica l'aggiornamento di MySQL. Perdere il contenitore non perderà alcun dato. È possibile utilizzare docker-compose per facilitare la gestione delle applicazioni Docker multi-container in un singolo host:
1) Crea il docker-compose.yml
file per gestire le tue applicazioni:
version: '2'
services:
app_db:
image: mysql:5.6
restart: unless-stopped
volumes_from: app_db_data
app_db_data:
volumes: /my/data/dir:/var/lib/mysql
2) Aggiorna MySQL (dalla stessa cartella del docker-compose.yml
file):
docker-compose pull
docker-compose up -d
Nota: l'ultimo comando sopra aggiornerà l'immagine MySQL, ricrea e avvia il contenitore con la nuova immagine.