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.
backup
docker
linux-containers
pguardiario
sumber
sumber
Jawaban:
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 .
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
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 run
perintah memiliki perilaku baru untuk-v
pilihan. 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 prune
perintah untuk menghapus semua volume yang menggantung dengan mudah.sumber
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 warisanmysqldump
. Cukup masukkan ke dalam wadah, buang, lalu salindocker cp
.data only container obsolete?
Tidak sama sekali. Wadah khusus data memberi Anda wadah untukdocker exec data-container tar -czf snapshot.tgz /data
saat itudocker cp data-container:snapshot.tgz ./snapshot.tgz
dan sejenisnya. Jika Anda ingin wadah tersebut berumur panjang, maka buatlah perintahnya sepertitail -f /dev/null
tidak pernah keluar, menggunakan sumber daya minimal.PEMBARUAN 2
Skrip pesta cadangan volume tunggal mentah:
Skrip bash pemulihan volume tunggal mentah:
Penggunaan bisa seperti ini:
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:
dan:
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:
Anda dapat mencadangkan semua volume seperti ini:
dan pulihkan seperti ini:
Atau Anda dapat mengikuti cara resmi:
Bagaimana cara port volume hanya data dari satu host ke yang lain?
sumber
unknown shorthand flag: 'r' in -rm.
Haruskah begitu--rm
? (Docker versi 18.09.5, build e8ff056)Jika Anda hanya perlu mencadangkan volume yang dipasang, Anda cukup menyalin folder dari Dockerhost 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 .
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
Sekarang Anda dapat memeriksa apakah itu bekerja dengan:
sumber
/var/lib/docker/volumes
bawah Ubuntu?Katakanlah nama volume Anda
data_volume
. Anda dapat menggunakan perintah berikut untuk mencadangkan dan mengembalikan volume ke dan dari gambar buruh pelabuhan bernamadata_image
:Untuk cadangan:
Untuk mengembalikan:
sumber
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
Perluas file tar ini ke dalam wadah baru sehingga kami dapat mengkomitnya sebagai bagian dari gambarnya
Komit dan dorong gambar dengan tag yang diinginkan ($ VERSION)
Akhirnya, mari kita bersihkan
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
Jalankan gambar whatEver Anda dengan volume dari data-conainter
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.
sumber
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-backup
dandb-restore
layanan ke file docker-compose.yml Anda, dan menyesuaikannya dengan nama volume Anda. Volume saya dinamaidbdata
dalam contoh ini.Hindari korupsi
Untuk konsistensi data, hentikan wadah db Anda sebelum mencadangkan atau memulihkan
Mencadangkan
Untuk mencadangkan ke tujuan default (
backup/dbdata.tar.bz2
):Atau, jika Anda ingin menentukan nama target alternatif, lakukan:
Memulihkan
Untuk memulihkan dari
backup/dbdata.tar.bz2
, lakukan:Atau pulihkan dari file tertentu menggunakan:
Saya mengadaptasi perintah dari https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ untuk membuat pendekatan ini.
sumber
Perintah berikut akan menjalankan tar dalam sebuah wadah dengan semua volume data bernama dipasang, dan mengarahkan output ke file:
Pastikan untuk menguji arsip yang dihasilkan jika terjadi kesalahan:
sumber
Jika Anda hanya perlu cadangan sederhana untuk arsip, Anda dapat mencoba utilitas kecil saya: https://github.com/loomchild/volume-backup
Contoh
Cadangkan:
akan mengarsipkan volume yang dinamai
some_volume
ke/tmp/archive1.tar.bz2
arsip fileMengembalikan:
akan menghapus dan mengembalikan volume yang dinamai
some_volume
dari/tmp/archive1.tar.bz2
file arsip.Info lebih lanjut: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362
sumber
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
duplicity
untuk 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.
sumber
Jika Anda ingin cadangan lengkap, Anda perlu melakukan beberapa langkah:
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. "
sumber
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.
sumber
Jika Anda memiliki kasing sesederhana milik Anda, Anda dapat melakukan hal berikut:
ADD folder destination
Misalnya, dengan asumsi Anda memiliki data dari volume pada direktori home Anda, misalnya
/home/mydata
Anda dapat menjalankan yang berikut ini:Di mana DOCKERFILE Anda menunjuk ke file seperti ini:
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
sumber
docker cp
.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 :
docker-compose.yml
dan lampirkanenv.txt
file 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 dijalankandocker inspect <service-name>
dan temukan volume :Edit konten file konfigurasi
env.txt
, dan letakkan di jalur proyek:Jalankan wadah dockup
sumber
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.
Di server lain
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, ..).
sumber