Saya menggunakan Docker untuk menyebarkan beberapa layanan pada 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 memiliki /files
volume yang ingin saya backup. Host mounts sepertinya mereka agak disukai, karena mount seperti itu sama sekali tidak portabel - seperti yang dikatakan dalam posting blog ini dan dokumentasi buruh pelabuhan untuk volume .
Saya tahu dari posting blog yang sama bahwa saya tidak memerlukan host host untuk mengakses file dalam volume, saya dapat menggunakan docker inspect
untuk mencari tahu di mana file-file itu.
Tapi ini masalah saya: Saya berpikir untuk mencadangkan hanya buruh pelabuhan yang diperlukan untuk membangun kontainer dan volume yang terkait dengannya. Jika saya harus mengembalikan semuanya dari cadangan, bagaimana cara mengetahui direktori volume yang sesuai dengan wadah mana? Membangun kembali wadah menyebabkan id dan jalur volume berubah, jadi saya perlu beberapa informasi tambahan untuk mencocokkannya. Apa lagi, jika ada, yang harus saya backup agar dapat benar-benar memulihkan semuanya?
docker inspect
s dibangun di template seperti:VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" )
. Mungkin juga bijaksana untuk mengingatkan orang agar tidak membuat cadangan file dengan cara ini saat mereka sedang aktif digunakan (misalnya, basis data).Volumes
hilang dan ada yangMounts
dengan struktur berbeda. Kita perlu melakukan sedikit lebih banyak pekerjaanrange
untuk menemukan titik mount yang menarik bagi kitaVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
Di Docker yang lebih baru (diuji dalam
1.9.1, build 9894698
) Anda dapat menggunakancp
perintah .Berikut adalah contoh cara menyalin direktori dari wadah ke host:
Berikut adalah contoh cara menyalin direktori dari wadah ke
tar
file:Terakhir, contoh cara menyalin direktori dari wadah ke
tar.gz
file:sumber
docker cp
mengirim semuanya melalui jaringan. Ini adalah sesuatu yang ingin Anda hindari terutama jika volume Docker Anda sudah menjadi volume btrfs.docker cp
akan lebih baik.