Вы можете использовать службу cron из вашей хост-системы для запуска следующей команды, как описано в документации для образа docker mysql :
Пример crontab для запуска команды каждую ночь в2:00 утра:
00 02 * * * /usr/bin/docker exec db-mysql sh -c 'exec mysqldump --all-databases -uroot -p"my-secret-pw"' > /some/path/on/your/host/all-databases.sql
В качестве альтернативы вы можете запустить другой контейнер, предназначенный только для этой задачи, такой как deitch / mysql-backup :
docker run --name db-mysql -d \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_USER=my-user \
-e MYSQL_PASSWORD=my-user-password \
-e MYSQL_DATABASE=my-db \
mysql:latest
docker run -d --restart=always \
--name=db-backup \
-e DB_DUMP_BEGIN=0200 \
-e DB_SERVER=db-mysql \
-e DB_USER=my-user \
-e DB_PASS=my-user-password \
-e DB_NAMES=my-db \
-e DB_DUMP_TARGET=/db \
-v /somewhere/on/your/host/:/db \
databack/mysql-backup
Также необходимо убедиться, что папка /somewhere/on/your/host/
доступна для записи пользователям группы 1005
:
sudo chgrp 1005 /somewhere/on/your/host/
sudo chmod g+rwX /somewhere/on/your/host/
Но этот контейнер должен иметь средство для подключения к вашему db-mysql
контейнеру.Для этого вы создаете сеть докеров и подключаете к ней оба контейнера:
docker network create mysql-backup-net
docker network connect mysql-backup-net db-backup
docker network connect mysql-backup-net db-mysql