Docker volume backup dan restore

Saya menggunakan Docker untuk menyebarkan beberapa layanan di server CentOS 6.4, dan saya mencoba mencari cara untuk membuat cadangan data yang mereka hasilkan dengan benar.

Misalnya, salah satu layanan adalah aplikasi web tempat pengguna dapat mengunggah file. Untuk wadah ini, saya punya /files volume yang ingin saya backup. Host Mount sepertinya agak disukai, karena mount seperti itu sama sekali tidak portabel-seperti yang dikatakan di posting blog ini dan dokumentasi docker untuk volume.

Saya tahu dari posting blog yang sama bahwa saya tidak membutuhkan host mount untuk mengakses file dalam volume, saya dapat menggunakan docker inspect untuk mengetahui di mana file tersebut berada.

Tapi inilah masalah saya: saya berpikir untuk mencadangkan hanya Dockerfile yang diperlukan untuk membangun wadah dan volume yang terkait dengannya. Jika saya harus memulihkan semuanya dari cadangan, Bagaimana Saya bisa mengetahui direktori volume mana yang sesuai dengan wadah mana? Membangun kembali wadah menyebabkan ID dan jalur volume berubah, jadi saya memerlukan beberapa informasi tambahan untuk mencocokkannya. Apa lagi, jika ada, yang harus saya backup untuk dapat benar-benar mengembalikan semuanya?

Kau benar. Karena Anda dapat memiliki beberapa wadah dengan volume sendiri, Anda perlu melacak volume mana yang sesuai dengan wadah mana.Cara melakukannya tergantung pada pengaturan Anda: saya menggunakan name-data untuk penampung data, jadi jelas penampung mana yang dimiliki gambar. Dengan begitu dapat didukung seperti ini:

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`tar -C $VOLUME . -czvf $NAME.tar.gz

Sekarang Anda hanya perlu membangun kembali gambar Anda dan membuat ulang wadah data Anda:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \                              -i busybox tar -C /path/int/container -xzf -

Jadi ini berarti Anda perlu cadangan:

  • Dockerfile
  • volume
  • jalur volume dalam wadah
  • nama wadah milik volume

Pembaruan: Sementara itu saya membuat alat untuk mencadangkan wadah dan volumenya (wadah)): https://github.com/discordianfish/docker-backup dan gambar cadangan yang dapat membuat cadangan dan mendorongnya ke s3: https://github.com/discordianfish/docker-lloyd

Di Docker yang lebih baru (diuji di 1.9.1, build 9894698) Anda dapat menggunakan cp perintah.

Berikut adalah contoh cara menyalin direktori dari wadah ke host:

docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/

Berikut adalah contoh cara menyalin direktori dari wadah ke tar berkas:

docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar

Last but not least contoh cara menyalin direktori dari wadah ke tar.gz berkas:

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz