Bagaimana saya bisa membuat cadangan wadah Docker dengan volume data?

152

Saya telah menggunakan tutum / wordpress Docker-image ini untuk menunjukkan situs web Wordpress. Baru-baru ini saya menemukan bahwa gambar menggunakan volume untuk data-MySQL.

Jadi masalahnya adalah ini: Jika saya ingin membuat cadangan dan memulihkan wadah, saya dapat mencoba mengkomit gambar, dan kemudian menghapus wadah, dan membuat wadah baru dari gambar yang dikomit. Tetapi jika saya melakukan itu volume akan dihapus dan semua data saya hilang.

Pasti ada cara sederhana untuk membuat cadangan wadah saya plus volumenya, tetapi saya tidak dapat menemukannya di mana pun.

pguardiario
sumber
Lihatlah skrip yang saya tulis ini yang mencadangkan segalanya dalam proyek buruh pelabuhan, termasuk volume bernama & tanpa nama, gambar, konfigurasi, log, sistem file kontainer root, basis data, dan banyak lagi: docker-compose-backup.sh .
Nick Sweeting

Jawaban:

142

jika saya ingin mengembalikan wadah saya dapat mencoba mengkomit gambar, dan kemudian menghapus wadah, dan membuat wadah baru dari gambar yang dikomit. Tetapi jika saya melakukan itu volume akan dihapus dan semua data saya hilang

Seperti yang dijelaskan oleh panduan pengguna buruh pelabuhan, volume data dimaksudkan untuk bertahan data di luar sistem file kontainer. Ini juga memudahkan berbagi data antara banyak wadah.

Sementara Docker tidak akan pernah menghapus data dalam volume (kecuali jika Anda menghapus wadah terkait dengan docker rm -v), volume yang tidak direferensikan oleh kontainer buruh pelabuhan disebut volume menggantung . Mereka volume menggantung sulit untuk menyingkirkan dan sulit diakses.

Ini berarti bahwa segera setelah wadah terakhir menggunakan volume dihapus, volume data menjadi menggantung dan isinya sulit diakses.

Untuk mencegah volume yang menggantung, triknya adalah membuat wadah buruh pelabuhan tambahan menggunakan volume data yang Anda ingin tetap; sehingga akan selalu ada setidaknya buruh pelabuhan yang merujuk volume. Dengan cara ini Anda dapat menghapus wadah buruh pelabuhan yang menjalankan aplikasi wordpress tanpa kehilangan kemudahan akses ke konten volume data itu.

Wadah seperti ini disebut wadah volume data .

Pasti ada beberapa cara sederhana untuk mencadangkan kontainer saya plus data volume tetapi saya tidak dapat menemukannya di mana pun.

gambar buruh pelabuhan cadangan

Untuk mencadangkan gambar buruh pelabuhan, gunakan perintah penyimpanan buruh pelabuhan yang akan menghasilkan arsip tar yang dapat digunakan nanti untuk membuat gambar buruh pelabuhan baru dengan perintah memuat buruh pelabuhan .

kontainer buruh pelabuhan cadangan

Anda dapat mencadangkan wadah buruh pelabuhan dengan berbagai cara

  • dengan melakukan gambar buruh pelabuhan baru berdasarkan pada keadaan saat ini wadah buruh pelabuhan menggunakan perintah komit buruh pelabuhan
  • dengan mengekspor sistem file kontainer buruh pelabuhan sebagai arsip tar menggunakan perintah ekspor buruh pelabuhan . Anda nanti bisa membuat gambar buruh pelabuhan baru dari arsip tar itu dengan perintah impor buruh pelabuhan .

Ketahuilah bahwa perintah-perintah itu hanya akan mencadangkan sistem file berlapis kontainer docker. Ini tidak termasuk volume data .

volume data buruh pelabuhan cadangan

Untuk mencadangkan volume data, Anda dapat menjalankan wadah baru menggunakan volume yang ingin Anda cadangkan dan menjalankan perintah tar untuk menghasilkan arsip konten volume seperti yang dijelaskan dalam panduan pengguna buruh pelabuhan .

Dalam kasus khusus Anda, volume data digunakan untuk menyimpan data untuk server MySQL. Jadi, jika Anda ingin mengekspor arsip tar untuk volume ini, Anda harus menghentikan server MySQL terlebih dahulu. Untuk melakukannya, Anda harus menghentikan wadah wordpress.

buat cadangan data MySQL

Cara lain adalah menghubungkan dari jarak jauh ke server MySQL untuk menghasilkan dump database dengan perintah mysqldump . Namun agar ini berfungsi, server MySQL Anda harus dikonfigurasi untuk menerima koneksi jarak jauh dan juga memiliki pengguna yang diizinkan untuk terhubung dari jarak jauh. Ini mungkin tidak terjadi dengan gambar docker wordpress yang Anda gunakan.


Edit

Docker baru-baru ini memperkenalkan plugin volume Docker yang memungkinkan untuk mendelegasikan penanganan volume ke plugin yang diterapkan oleh vendor.

The docker runperintah memiliki perilaku baru untuk -vpilihan. Sekarang dimungkinkan untuk memberikannya nama volume . Volume yang dibuat dengan cara itu dinamai dan mudah direferensikan nanti, meredakan masalah dengan volume yang menggantung .

Edit 2

Docker memperkenalkan docker volume pruneperintah untuk menghapus semua volume yang menggantung dengan mudah.

Thomasleveil
sumber
34
Sebenarnya saya lebih tertarik membuat wadah yang bisa saya pindahkan dengan mudah, saya tidak mengerti titik wadah yang tidak bisa dipindahkan.
pguardiario
Dalam hal ini, Anda harus melihat alat yang membantu mengelola volume data Docker untuk Anda, seperti Flocker
Thomasleveil
9
Docker tidak menghapus volume data secara otomatis. Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. jadi hanya wadah data yang merupakan warisan
Andrii Zarubin
2
Anda tidak memerlukan koneksi jarak jauh untuk mysqldump. Cukup masukkan ke dalam wadah, buang, lalu salin docker cp.
jiggunjer
@AndriiZarubin re: data only container obsolete?Tidak sama sekali. Wadah khusus data memberi Anda wadah untuk docker exec data-container tar -czf snapshot.tgz /datasaat itu docker cp data-container:snapshot.tgz ./snapshot.tgzdan sejenisnya. Jika Anda ingin wadah tersebut berumur panjang, maka buatlah perintahnya seperti tail -f /dev/nulltidak pernah keluar, menggunakan sumber daya minimal.
Jesse Chisholm
31

PEMBARUAN 2

Skrip pesta cadangan volume tunggal mentah:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Skrip bash pemulihan volume tunggal mentah:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Penggunaan bisa seperti ini:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

Asumsinya adalah: file cadangan bernama backup.tar, itu berada di direktori yang sama dengan skrip cadangan dan pengembalian, nama volume sama antara wadah.

MEMPERBARUI

Sepertinya saya bahwa mencadangkan volume dari kontainer tidak berbeda dengan mencadangkan volume dari wadah data.

Volume tidak lain adalah jalur yang dihubungkan ke wadah sehingga prosesnya sama.

Saya tidak tahu apakah cadangan buruh pelabuhan juga berfungsi untuk volume kontainer yang sama tetapi Anda dapat menggunakan:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

dan:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

AKHIR PEMBARUAN

Ada alat bagus yang tersedia yang memungkinkan Anda membuat cadangan dan mengembalikan wadah volume buruh pelabuhan:

https://github.com/discordianfish/docker-backup

jika Anda memiliki kontainer yang ditautkan ke beberapa volume kontainer seperti ini:

$ docker run --volumes-from=my-data-container --name my-server ...

Anda dapat mencadangkan semua volume seperti ini:

$ docker-backup store my-server-backup.tar my-server

dan pulihkan seperti ini:

$ docker-backup restore my-server-backup.tar

Atau Anda dapat mengikuti cara resmi:

Bagaimana cara port volume hanya data dari satu host ke yang lain?

tommasop
sumber
Tidak, ini bukan situasi "--volumes-from", melainkan volumenya ditentukan di dockerfile yang menyebabkan data tidak bertahan. Jika Anda melihat dockerfile untuk tutum / lampu Anda akan melihat apa yang saya maksud.
pguardiario
Jawaban yang sudah saya berikan baik untuk segala jenis volume karena volume adalah volume dan wadah adalah wadah tidak ada perbedaan jika Anda menggunakan wadah sebagai wadah data dari perspektif volume
tommasop
Volume yang ditentukan dalam dockerfile dihancurkan ketika kontainer dihancurkan. Jadi tidak ada cara untuk mendapatkan data itu kembali ketika Anda memindahkan wadah.
pguardiario
Anda harus mengeluarkan data sebelum memindahkan wadah, lalu meluncurkan kembali wadah dan mengembalikan datanya
tommasop
1
Saya mendapatkan kesalahan: unknown shorthand flag: 'r' in -rm.Haruskah begitu --rm? (Docker versi 18.09.5, build e8ff056)
kuga
22

Jika Anda hanya perlu mencadangkan volume yang dipasang, Anda cukup menyalin folder dari Dockerhost Anda .

Catatan: Jika Anda menggunakan Ubuntu , Dockerhost adalah mesin lokal Anda. Jika Anda menggunakan Mac , Dockerhost adalah mesin virtual Anda.

Di Ubuntu

Anda dapat menemukan semua folder dengan volume di sini: /var/lib/docker/volumes/sehingga Anda dapat menyalinnya dan mengarsipkan di mana pun Anda inginkan.

Di MAC

Tidak semudah di Ubuntu. Anda perlu menyalin file dari VM.

Berikut ini adalah skrip cara menyalin semua folder dengan volume dari mesin virtual (tempat server Docker berjalan) ke mesin lokal Anda. Kami berasumsi bahwa VM mesin docker Anda bernama default .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Ini akan membuat folder ./backup_volumes di direktori Anda saat ini dan salin semua volume ke folder ini.

Berikut ini adalah skrip cara menyalin semua volume yang disimpan dari direktori lokal Anda ( ./backup_volumes ) ke mesin Dockerhost

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Sekarang Anda dapat memeriksa apakah itu bekerja dengan:

docker volume ls
Andrii Dvoiak
sumber
Apakah kita perlu mematikan wadah untuk membuat cadangan folder itu di /var/lib/docker/volumesbawah Ubuntu?
onknows
2
Tidak perlu, Anda dapat menyalin folder itu kapan saja Anda mau.
Andrii Dvoiak
4
Secara teknis ya, Anda bisa, tetapi Anda terkena masalah korupsi data karena salinannya adalah non-atomik dan mungkin ada menulis bersamaan ke volume, saya lebih suka menghentikan wadah pertama.
Alessandro S.
13

Katakanlah nama volume Anda data_volume. Anda dapat menggunakan perintah berikut untuk mencadangkan dan mengembalikan volume ke dan dari gambar buruh pelabuhan bernama data_image:

Untuk cadangan:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Untuk mengembalikan:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-
Sahil Ahuja
sumber
Apakah ini pencadangan waktu nyata?
Kang Andrew
2
Karena volume yang sama dapat dipasang pada beberapa buruh pelabuhan, ya ini adalah cadangan waktu-nyata. Misalnya. volume yang dipasang pada wadah Mysql dapat didukung (dengan asumsi tidak ada data-korupsi). Tetapi untuk layanan yang harus dihentikan karena takut korupsi data, tidak ada ini bukan waktu nyata.
Sahil Ahuja
9

Saya tahu ini sudah tua, tetapi saya menyadari bahwa tidak ada solusi yang terdokumentasi dengan baik untuk mendorong wadah data (sebagai cadangan) ke hub docker. Saya baru saja menerbitkan contoh singkat tentang bagaimana melakukannya di https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub

Berikut ini adalah intinya

Tutorial buruh pelabuhan menyarankan Anda dapat membuat cadangan dan mengembalikan volume data secara lokal. Kami akan menggunakan teknik ini, menambahkan beberapa baris lagi untuk mendapatkan cadangan ini didorong ke hub docker untuk pemulihan masa depan yang mudah ke lokasi yang kita inginkan. Jadi, mari kita mulai. Ini adalah langkah-langkah untuk diikuti:

Cadangkan volume data dari wadah data bernama data-container-to-backup

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Perluas file tar ini ke dalam wadah baru sehingga kami dapat mengkomitnya sebagai bagian dari gambarnya

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Komit dan dorong gambar dengan tag yang diinginkan ($ VERSION)

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Akhirnya, mari kita bersihkan

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Sekarang kita memiliki gambar yang bernama data-backup di repo kami yang hanya sebuah sistem file dengan file dan folder cadangan. Untuk menggunakan gambar ini (alias pulihkan dari cadangan), kami melakukan hal berikut:

Jalankan wadah data dengan gambar cadangan data

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Jalankan gambar whatEver Anda dengan volume dari data-conainter

docker run --volumes-from=data-container repo/whatEver

Itu dia.

Saya terkejut tidak ada dokumentasi untuk pekerjaan ini. Saya harap seseorang menemukan ini bermanfaat. Saya tahu perlu beberapa saat untuk memikirkan hal ini.

bintang-z
sumber
8

Jika proyek Anda menggunakan komposisi buruh pelabuhan, berikut adalah pendekatan untuk membuat cadangan dan memulihkan volume Anda.

docker-compose.yml

Pada dasarnya Anda menambahkan db-backupdan db-restorelayanan ke file docker-compose.yml Anda, dan menyesuaikannya dengan nama volume Anda. Volume saya dinamai dbdatadalam contoh ini.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Hindari korupsi

Untuk konsistensi data, hentikan wadah db Anda sebelum mencadangkan atau memulihkan

docker-compose stop db

Mencadangkan

Untuk mencadangkan ke tujuan default ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Atau, jika Anda ingin menentukan nama target alternatif, lakukan:

docker-compose run --rm -e TARGET=mybackup db-backup

Memulihkan

Untuk memulihkan dari backup/dbdata.tar.bz2, lakukan:

docker-compose run --rm db-restore

Atau pulihkan dari file tertentu menggunakan:

docker-compose run --rm -e SOURCE=mybackup db-restore

Saya mengadaptasi perintah dari https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ untuk membuat pendekatan ini.

jdhildeb
sumber
5

Perintah berikut akan menjalankan tar dalam sebuah wadah dengan semua volume data bernama dipasang, dan mengarahkan output ke file:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Pastikan untuk menguji arsip yang dihasilkan jika terjadi kesalahan:

tar -tjf data-volumes.tar.bz2
konrad
sumber
4

Jika Anda hanya perlu cadangan sederhana untuk arsip, Anda dapat mencoba utilitas kecil saya: https://github.com/loomchild/volume-backup

Contoh

Cadangkan:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

akan mengarsipkan volume yang dinamai some_volumeke/tmp/archive1.tar.bz2 arsip file

Mengembalikan:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

akan menghapus dan mengembalikan volume yang dinamai some_volumedari /tmp/archive1.tar.bz2file arsip.

Info lebih lanjut: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362

loomchild
sumber
Saya membuat alat serupa github.com/01e9/docker-backup Ini membuat arsip cadangan dan menambahkannya ke direktori sinkronisasi Resilio
Oleg
2

Saya telah membuat alat untuk mengatur dan meluncurkan cadangan data dan wadah mysql, cukup disebut docker-backup . Bahkan ada gambar yang siap digunakan di hub buruh pelabuhan .

Ini terutama ditulis dalam Bash karena terutama orkestrasi. Ini digunakan duplicityuntuk mesin cadangan yang sebenarnya. Saat ini Anda dapat membuat cadangan ke FTP (S) dan Amazon S3.

Konfigurasi ini cukup sederhana: tulis file config di YAML yang menguraikan apa yang harus dicadangkan dan di mana, dan di sini Anda mulai!

Untuk wadah data, ia secara otomatis memasang volume yang dibagikan oleh wadah Anda untuk membuat cadangan dan memprosesnya. Untuk wadah mysql, itu menautkannya dan menjalankan mysqldump yang dibundel dengan wadah Anda dan memproses hasilnya.

Saya menulisnya karena saya menggunakan Docker-Cloud yang tidak up-to-date dengan rilis mesin docker baru-baru ini dan karena saya ingin merangkul cara Docker dengan tidak memasukkan proses cadangan di dalam wadah aplikasi saya.

Arnaud de Mouhy
sumber
2

Jika Anda ingin cadangan lengkap, Anda perlu melakukan beberapa langkah:

  1. Komit wadah ke gambar
  2. Simpan gambar
  3. Cadangkan volume kontainer dengan membuat file tar dari titik mount volume di wadah.
  4. Ulangi langkah 1-3 untuk wadah basis data juga.

Perhatikan bahwa melakukan hanya komitmen Docker dari wadah ke gambar TIDAK termasuk volume yang melekat pada wadah (ref: Dokumentasi komitmen Docker ).

" Operasi komit tidak akan mencakup data apa pun yang terkandung dalam volume yang dipasang di dalam wadah. "

eaglet3d
sumber
1

Jika Anda suka memasukkan operator misterius dari baris perintah, Anda akan menyukai teknik cadangan kontainer manual ini. Ingat, ada cara yang lebih cepat dan lebih efisien untuk membuat cadangan wadah yang sama efektifnya. Saya sudah menulis instruksi di sini: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Langkah 1: Tambahkan Host Docker ke Any Cloud Seperti dijelaskan dalam tutorial di situs dukungan Morpheus, Anda dapat menambahkan host Docker ke cloud pilihan Anda dalam hitungan detik. Mulailah dengan memilih Infrastruktur di bilah navigasi Morpheus utama. Pilih Host di bagian atas jendela Infrastruktur, dan klik tombol "+ Host Kontainer" di kanan atas.

Untuk mencadangkan host Docker ke cloud melalui Morpheus, navigasikan ke layar Infrastruktur dan buka menu "+ Host Kontainer".

Pilih jenis host kontainer pada menu, pilih grup, dan kemudian masukkan data dalam lima bidang: Nama, Deskripsi, Visibilitas, Pilih Awan dan Masukkan Tag (opsional). Klik Berikutnya, lalu konfigurasikan opsi host dengan memilih paket layanan. Perhatikan bahwa bidang Volume, Memori, dan jumlah CPU akan terlihat hanya jika paket yang Anda pilih memiliki opsi khusus diaktifkan.

Di sinilah Anda menambah dan mengukur volume, mengatur ukuran memori dan jumlah CPU, dan memilih jaringan. Anda juga dapat mengkonfigurasi nama pengguna dan kata sandi OS, nama domain, dan nama host, yang secara default adalah nama wadah yang Anda masukkan sebelumnya. Klik Berikutnya, dan kemudian tambahkan Alur Kerja Otomatisasi (opsional). Terakhir, tinjau pengaturan Anda dan klik Lengkap untuk menyimpannya.

Langkah 2: Tambahkan Integrasi Registri Docker ke Awan Publik atau Pribadi Adam Hicks menjelaskan dalam tutorial Morpheus lain betapa sederhananya mengintegrasikan dengan Docker Registry pribadi. (Tidak diperlukan konfigurasi tambahan untuk menggunakan Morpheus untuk menyediakan gambar dengan hub publik Docker menggunakan API Docker publik.)

Pilih Integrasi di bawah tab Admin di bilah navigasi utama, lalu pilih tombol "+ Integrasi Baru" di sisi kanan layar. Di jendela Integrasi yang muncul, pilih Docker Repository di menu drop-down Type, masukkan nama dan tambahkan titik akhir API registri pribadi. Masukkan nama pengguna dan kata sandi untuk registri yang Anda gunakan, dan klik tombol Simpan Perubahan.

Integrasikan Docker Registry dengan cloud pribadi melalui kotak dialog "Integrasi Baru" Morpheus.

Untuk menyediakan integrasi yang baru saja Anda buat, pilih Docker di bawah Ketik dalam dialog Create Instance, pilih registri di menu tarik-turun Docker Registry di bawah tab Configure, dan kemudian lanjutkan penyediaan seperti yang Anda lakukan pada wadah Docker.

Langkah 3: Kelola Cadangan Setelah Anda menambahkan host Docker dan mengintegrasikan registri, cadangan akan dikonfigurasi dan dilakukan secara otomatis untuk setiap instance yang Anda berikan. Dukungan Morpheus menyediakan instruksi untuk melihat cadangan, membuat cadangan instan, dan membuat cadangan server.

thefef07
sumber
0

Jika Anda memiliki kasing sesederhana milik Anda, Anda dapat melakukan hal berikut:

  1. Buat Dockerfile yang memperluas gambar dasar wadah Anda
  2. Saya berasumsi bahwa volume Anda dipetakan ke sistem file Anda, jadi Anda bisa menambahkan file / folder tersebut ke gambar Anda menggunakan ADD folder destination
  3. Selesai!

Misalnya, dengan asumsi Anda memiliki data dari volume pada direktori home Anda, misalnya /home/mydataAnda dapat menjalankan yang berikut ini:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Di mana DOCKERFILE Anda menunjuk ke file seperti ini:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <[email protected]>

WORKDIR /opt/data
ADD mydata .

Sisa barang diwarisi dari gambar dasar. Anda sekarang dapat mendorong gambar itu ke cloud docker dan pengguna Anda akan memiliki data yang tersedia langsung di wadah mereka

Danielo515
sumber
apa gunanya menggunakan volume jika Anda hanya akan memanggangnya ke dalam gambar pada akhirnya.
jiggunjer
@jiggunjer memiliki volume memungkinkan Anda untuk menimpa data dalam wadah
Danielo515
Saya bisa mengganti data tanpa volume juga, menggunakan docker cp.
jiggunjer
0

Masalahnya : Anda ingin mencadangkan wadah gambar Anda DENGAN volume data di dalamnya tetapi opsi ini Tidak keluar kotak, Cara lurus ke depan dan sepele akan menyalin jalur volume dan mencadangkan gambar pekerja pelabuhan 'memuat ulang dan dan menautkannya berdua bersama. tetapi solusi ini tampaknya kikuk dan tidak berkelanjutan dan dapat dipertahankan - Anda harus membuat pekerjaan cron yang akan membuat aliran ini setiap kali.

Solusi : Menggunakan dockup - Gambar Docker untuk mencadangkan volume kontainer Docker Anda dan mengunggahnya ke s3 (Docker + Backup = dockup). dockup akan menggunakan kredensial AWS Anda untuk membuat ember baru dengan nama sesuai variabel lingkungan, mendapatkan volume yang dikonfigurasi dan akan ter-tarball, di-gzip, di-cap waktu, dan diunggah ke ember S3.

Langkah-langkah :

  1. konfigurasikan docker-compose.ymldan lampirkan env.txtfile konfigurasi ke dalamnya, Data harus diunggah ke ember s3 aman khusus dan siap untuk dimuat ulang pada eksekusi DRP. untuk memverifikasi jalur volume mana yang harus dikonfigurasikan dijalankan docker inspect <service-name>dan temukan volume :

"Volume": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Edit konten file konfigurasi env.txt, dan letakkan di jalur proyek:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Jalankan wadah dockup

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Setelah itu verifikasi ember s3 Anda berisi data yang relevan
avivamg
sumber
-1

Ini adalah cara cadangan folder volume.
Jika Anda memiliki informasi registri docker, Metode ini sangat membantu.
Ini menggunakan register buruh pelabuhan untuk memindahkan file zip dengan mudah.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

Di server lain

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Jalankan gambar Anda yang menggunakan folder volume ini.
Anda dapat membuat gambar yang memiliki satu file run-image dan satu volume zip dengan mudah.
Tapi saya tidak menyarankan untuk berbagai alasan (ukuran gambar, perintah masuk, ..).

Myeongsik Joo
sumber