Containerlar ephemeral stroge kullanırlar. Yani container öldüğünde içindeki datada onunla birlikte yok olur gider. Bu yüzden, persistent volume‘ler kullanılır. Kalıcı olmasını istediğimiz datayı, containerın dışında tutarız. Ben, belli aralıklar ile bu volume’ü yedeklemek istiyorum. Basit bir işlem, mevcut volume’ü, sunucuda bir dizinde, bir .tar dosyası olarak belli bir süre için saklayacağız. Aşağıdaki birkaç satırlık bash script bunu işi yapmak için yeterli.
#! /bin/bash
now=$(date +%Y-%m-%d)
old=$(date -d 'now -3 weeks' +%Y-%m-%d)
docker run --rm --volumes-from grafana -v /foo/backup:/backup alpine tar cf /backup/grafana-"$now".tar /var/lib/grafana
rm -f /foo/backup/grafana-"$old".tar
Scripti çalışabilir kılmak için execute yetkisi de vermemiz gerekecek. chmod +x script.sh
. Scriptin yetkilerini görmek için ls -l script.sh
komutunu kullanabiliriz.
Tabii ki sürekli gelip bu scripti manuel tetiklemeyeceğiz. Linux’da bu gibi işler için crontab var. Crontab’a çizelge (zaman bilgisi) ve yapacağı işi söyleyeceğiz sadece.
crontab -e
Aşağıdaki satır ile crontab’a her haftanın 5. günü, saat 19’da dizindeki scripti çalıştırması gerektiğini söylüyor. Buradaki zaman bilgisi gösterimi hakkında desteğe ihtiyacınız olduğunda kullanabileceğiniz güzel bir site önererek bitireyim, crontab.guru
0 19 * * 5 /path/to/script.sh