GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menyimpan Data Kontainer Docker Dalam Volume Docker

Salah satu opsi untuk mengotomatiskan wadah dengan data adalah dengan menyimpan data di dalam gambar wadah. Namun, ini memerlukan salinan data untuk berada di setiap container yang Anda jalankan, yang dapat menyebabkan sumber daya yang terbuang sia-sia jika container ditingkatkan. Opsi yang lebih baik adalah menyimpan satu salinan data dalam volume Docker dan kemudian membagikan volume tersebut antar container.

Anda dapat menganggap volume Docker sebagai folder yang ada di luar sistem file container tetapi masih dapat diakses oleh container yang berjalan di host yang sama. Saat Anda membuat wadah baru, Anda dapat memasang volume yang ada atau membuat yang baru. Jika Anda membuat volume baru, Docker akan secara otomatis membuat lapisan penyimpanan baru pada sistem file host yang mendasarinya dan menginisialisasinya dengan data yang Anda tentukan.

Setelah Anda membuat volume, Anda dapat menggunakannya untuk menyimpan semua jenis data, termasuk file statis, data aplikasi, atau log. Anda juga dapat menggunakan volume untuk berbagi data antar container.

Misalnya, jika Anda memiliki aplikasi web yang berjalan dalam satu wadah, Anda dapat menggunakan volume untuk menyimpan kode sumber aplikasi sehingga wadah lain dalam penerapan Anda dapat mengaksesnya. Hal ini memungkinkan Anda untuk menjaga kode sumber aplikasi Anda terpisah dari lingkungan runtime, sehingga lebih mudah untuk memperbarui dan menerapkan ulang aplikasi Anda.

Selain berbagi data antar container, Anda juga dapat menggunakan volume untuk menyimpan data saat Anda menghentikan dan memulai container. Ini adalah cara yang bagus untuk menjaga keamanan data Anda meskipun penampung Anda tidak sengaja terhapus atau dihentikan.

Dalam panduan ini, Anda akan mempelajari bagaimana volume Docker berinteraksi dengan container. Anda akan melakukan ini dengan membuat wadah baru dan menggunakan volume untuk menyimpan dan berbagi data di antara mereka. Kemudian, Anda akan menemukan cara mengosongkan ruang yang ditinggalkan oleh volume anonim yang dihasilkan secara otomatis oleh wadah. Terakhir, Anda akan mempelajari cara mencadangkan data volume Docker Anda.

Mari kita mulai!

Prasyarat

  • Untuk mengikuti panduan ini, Anda harus terbiasa dengan dasar-dasar bekerja dengan container Docker.
  • Panduan ini mengasumsikan bahwa Anda menggunakan host Linux. Panduan ini menggunakan CentOS, tetapi langkah yang sama harus diterapkan pada distribusi Linux lainnya.
  • Anda harus menginstal dan menjalankan Docker di host Anda. Jika Anda belum menginstalnya, ikuti petunjuk di panduan Instalasi kami.
  • Akun pengguna dengan hak akses root
  • Anda telah menginstal Docker di host Linux.

Menemukan Volume Docker Anonim

Saat Anda membuat wadah Docker baru, secara default volume anonim baru dibuat di sistem file host. Volume ini digunakan untuk menyimpan data yang dibutuhkan oleh container.

1. Jalankan perintah berikut untuk memeriksa apakah buruh pelabuhan berjalan dan aktif.

sudo systemctl status docker

2. Jalankan perintah berikut untuk menambahkan akun pengguna Anda ke grup buruh pelabuhan sehingga Anda dapat menjalankan perintah buruh pelabuhan tanpa menggunakan sudo. Setelah Anda menambahkan akun pengguna Anda ke grup buruh pelabuhan, keluar dan masuk kembali agar perubahan Anda berlaku.

sudo usermod -aG docker $(whoami)

3. Jalankan perintah berikut untuk menarik beberapa gambar dari registry Docker ke host Anda. Anda akan menggunakan gambar ini untuk berlatih membuat dan bekerja dengan volume Docker.

docker pull postgres:12.1
docker pull bash 
docker pull httpd:2.4

4. Jalankan perintah berikut untuk mencantumkan gambar yang saat ini ada di host Anda untuk memverifikasi bahwa gambar telah ditarik.

docker images

5. Jalankan perintah berikut untuk melihat apakah ada volume aktif di host Anda. Anda akan melihat output seperti berikut.

docker volume ls

Anda akan melihat output kosong.

6. Jalankan perintah berikut untuk membuat wadah baru dan verifikasi bahwa volume anonim baru telah dibuat di host. Anda menggunakan flag -d untuk menjalankan wadah dalam mode terpisah sehingga Anda dapat terus bekerja di terminal. Anda menggunakan flag --name untuk memberi nama wadah sehingga Anda dapat dengan mudah mengidentifikasinya. Anda menggunakan gambar postgres:12.1 di sini karena Postgres membutuhkan volume latar belakang untuk menyimpan datanya. Anda harus menjalankan dua wadah, satu untuk masing-masing database Postgres Anda untuk ukuran yang baik dan informasi lebih lanjut untuk dilihat.

docker run -d --name db1 postgres:12.1
docker run -d --name db2 postgres:12.1

7. Jalankan perintah buruh pelabuhan di bawah ini untuk membuat daftar container yang sedang berjalan di host Anda.

docker ps

Sekarang Anda memiliki dua penampung: db1 dan db2, seperti yang ditunjukkan di bawah ini.

8. Sekarang, daftar volume yang telah dibuat pada host.

docker volume ls

Anda akan melihat output yang mirip dengan berikut ini. Setelah Postgres dimulai, ia membutuhkan tempat untuk menyimpan datanya. Postgres tidak ingin kehilangan datanya, sehingga Postgres secara otomatis membuat volume anonim. Volume diberi nama dengan string acak karakter Hex yang ditambahkan padanya (e9f338... dan  ee3423... ).

Mari kita lihat lebih dekat volume dengan menggunakan perintah docker inspect.

9. Jalankan perintah di bawah ini untuk mendapatkan informasi lebih lanjut tentang wadah db1 dalam format yang dapat dibaca manusia.

docker inspect db1 -f '{{ json .Mounts }}' | python -m json.tool

Seperti yang Anda lihat di bawah, e9f338 Nama baris cocok dengan output dari output perintah docker volume ls di atas. Baris ini memberitahu Anda bahwa volume ini terkait dan dipasang dengan db1 wadah.

10. Lakukan hal yang sama untuk memeriksa db2 wadah.

docker inspect db2 -f '{{ json .Mounts}}' | python -m json.tool

Anda akan melihat bahwa outputnya persis sama dengan db1 wadah, kecuali untuk nama volume yang akan berbeda. Keluaran ini mengonfirmasi bahwa Docker membuat volume anonim baru untuk setiap wadah yang dibuat.

11. Jalankan satu kontainer lagi. Tapi kali ini, kita akan menggunakan flag --rm dan melihat apa yang terjadi dengan volume. Kami menamai wadah ini dbTmp. Ayo cari tahu!

docker run -d --rm --name dbTmp postgres:12.1

Kami sekarang memiliki tiga wadah:db1 , db2, dan dbTmp aktif dan berjalan

docker ps

12. Buat daftar volume lagi.

docker volume ls

Anda akan melihat bahwa volume ketiga telah dibuat untuk dbTmp wadah.

13. Sekarang, hentikan db2 beserta container dbTmp dengan perintah di bawah ini.

buruh pelabuhan berhenti db2 dbTmp

13. Buat daftar wadah dan volumenya lagi.

buruh pelabuhan ps

docker volume ls

Seperti yang ditunjukkan di bawah ini, satu-satunya wadah yang dibiarkan berjalan adalah wadah db1. Namun, volume untuk wadah dbTemp sekarang hilang tetapi volume untuk wadah db2(ee3423... ) masih ada.

Perilaku ini diharapkan. Bendera --rm menghapus wadah setelah berhenti, bersama dengan volume terkait. Volume penampung dbTmp hilang karena kami menghentikan penampung dbTemp. Karena kami tidak menentukan flag --rm saat kami membuat wadah db2, wadah db2 dan volume yang terkait tetap berada di host meskipun kami menghentikan wadah. Kesimpulan dari contoh ini adalah Anda harus berhati-hati dengan flag --rm. Jika Anda menghentikan penampung yang memiliki volume terkait, volume tersebut akan dihapus.

Membuat Volume Docker

Volume Docker adalah wadah penyimpanan bernama yang Anda buat menggunakan perintah docker volume create. Anda kemudian akan menggunakan volume untuk menyimpan data atau untuk berbagi data antar container.

1. Jalankan perintah berikut untuk membuat volume baru bernama situs web.

docker volume create website

2. Daftar volume, Anda dapat melihat volume baru yang baru saja Anda buat.

docker volume ls

3. Unduh kode situs web ini dari GitHub ke direktori kerja Anda saat ini.

4.  Jalankan perintah di bawah ini untuk menyalin kode situs web yang baru saja Anda unduh ke volume situs web.

sudo cp -r /home/cloud_user/widget-factory-inc/web/* /var/lib/docker/volumes/website/_data/

5. Jalankan perintah di bawah ini untuk membuat daftar file di volume situs web.

sudo ls -l /var/lib/docker/volumes/website/_data/ 

Anda dapat melihat bahwa kode situs web sekarang disimpan di volume situs web.

6. Sekarang Anda dapat memulai wadah baru dan melampirkan volume situs web ke dalamnya. Anda menggunakan flag -v (volume) untuk memasang volume. Anda menggunakan flag -p (pemetaan port) untuk memetakan port pada host ke port dalam container. Dalam contoh ini, kami memetakan port 80 di host ke port 80 di container. Web1 adalah nama penampung.

docker run -d --name web1 -p 80:80 -v website:/usr/local/apache2/htdocs:ro httpd:2.4

7. Website sekarang akan dilayani dari web1 container. Jalankan perintah docker ps untuk memeriksa status container web1. Anda dapat melihat bahwa situs web sedang dilayani dari wadah web1. Anda juga dapat melihat port tempat situs web dilayani (80) seperti yang ditunjukkan di bawah ini.

8. Anda dapat membuka alamat IP mesin host di browser web untuk melihat situs web yang baru saja Anda salin.

9. Sekarang jalankan satu wadah lagi bernama webTmp kali ini dengan tanda --rm untuk melihat apa yang terjadi pada volume situs web saat Anda menghentikan wadah webTmp.

docker run -d --name webTmp --rm -v website:/usr/local/apache2/htdocs:ro httpd:2.4

10. Jalankan perintah docker ps show untuk memverifikasi bahwa container webTmp sedang berjalan.

docker ps 

11. Sekarang hentikan wadah webTmp dan daftar volumenya.

docker stop webTmp

volume buruh pelabuhan ls

Seperti yang Anda ingat di awal artikel ini, saat Anda menghentikan wadah, volume yang terkait juga dihapus. Namun kali ini, seperti gambar di bawah ini, Anda dapat melihat bahwa volume situs web masih ada. Jadi apa yang terjadi?

Pengambilan kunci dalam contoh ini adalah ketika Anda menghentikan sebuah wadah, data dalam volume yang terkait dengan wadah tersebut tidak dihapus selama volume tersebut digunakan oleh wadah lain. Dalam hal ini, volume situs web masih digunakan oleh penampung web1. Ini adalah poin yang sangat penting untuk diingat ketika bekerja dengan volume Docker.

Menyingkirkan Volume yang Tidak Digunakan

Meskipun volume adalah cara yang bagus untuk menyimpan data dan menjaganya tetap teratur, volume juga dapat menghabiskan banyak ruang disk jika tidak digunakan. Jika Anda tidak menggunakan volume, yang terbaik adalah menghapusnya dari sistem Anda untuk mengosongkan ruang disk. Untungnya, Docker menawarkan semua alat yang Anda butuhkan untuk menghapus volume yang tidak digunakan dari sistem Anda.

1. Jalankan perintah docker volume prune untuk menghapus sumber daya yang menggantung (gambar, jaringan, volume, dan wadah). Sumber daya yang menggantung adalah objek Docker yang saat ini tidak terkait dengan wadah. Namun sebelum Anda mengeluarkan volume, pastikan tidak ada wadah yang menggunakannya. Misalnya, Anda harus menghapus wadah db2 sebelum Anda dapat menghapus volume yang tidak digunakan yang terkait dengannya.

docker stop db2
docker rm db2
docker volume prune

2. Buat daftar volume dan Anda dapat melihat bahwa volume db2 sekarang hilang.

docker volume ls

3. Jalankan di bawah ini untuk menemukan lokasi data volume situs web Anda sehingga Anda dapat mencadangkannya.

docker volume inspect website

Anda akan melihat titik Mount untuk situs web Anda. Titik pemasangan adalah direktori pada sistem operasi host Anda tempat volume buruh pelabuhan dipasang. Dalam contoh ini, titik pemasangan adalah /var/lib/docker/volumes/website/_data , seperti yang ditunjukkan di bawah ini.

4. Anda dapat menggunakan perintah tar untuk mencadangkan isi volume situs web Anda. Sudah ada sejak lama dan didukung di sebagian besar platform. Perintah tar dapat digunakan untuk membuat cadangan direktori, termasuk semua subdirektori dan filenya.

Catatan :Anda HARUS menjalankan perintah ini sebagai pengguna root atau Anda tidak akan memiliki izin untuk menulis ke volume buruh pelabuhan yang terpasang, seperti yang ditunjukkan di bawah ini.

tar czf /tmp/website_$(date +%Y-%m-%d-%H%M).tgz -C /var/lib/docker/volumes/website/_data .

5. Jalankan perintah di bawah ini untuk memverifikasi bahwa file cadangan tar telah berhasil dibuat.

ls -l /tmp/website_*.tgz

6. Jalankan perintah di bawah ini untuk memverifikasi bahwa file cadangan berisi data yang benar. Ganti YOUR_BACKUP_FILE_NAME dengan nama sebenarnya dari file cadangan Anda.

tar tf /tmp/<YOUR_BACKUP_FILE_NAME>.tgz 

7. Sekarang mari kita jalankan satu container lagi menggunakan volume website. Kali ini Anda akan menggunakan flag -it untuk berinteraksi dengan container untuk menguji backup.

docker run -it --rm -v website:/website -v /tmp:/backup bash tar czf /backup/website_$(date +%Y-%m-%d-%H-%M).tgz -C /website .

8. Pindah ke direktori volume dan hapus semua data situs web.

9. Buat daftar isi direktori untuk melihat bahwa data situs web hilang.

ls -l

10. Jalankan perintah di bawah ini untuk mengembalikan data situs web. Ganti dengan nama sebenarnya dari file cadangan Anda.

tar xf <YOUR_BACKUP_FILE_NAME>.tgz .

11. Buat daftar isi direktori untuk memverifikasi bahwa data situs web telah dipulihkan.

ls -l

Kesimpulan

Dalam panduan ini, Anda telah mempelajari cara membuat, mencadangkan volume buruh pelabuhan, dan memulihkan data. Anda juga mempelajari di mana menemukan titik pemasangan untuk volume buruh pelabuhan Anda.

Docker telah mendapatkan banyak popularitas baru-baru ini karena membuatnya mudah untuk menyebarkan aplikasi. Namun, dengan kekuatan besar datang tanggung jawab besar. Penting untuk mencadangkan volume buruh pelabuhan Anda untuk mencegah kehilangan data jika terjadi bencana.

Ada banyak hal yang harus dipelajari tentang Docker. Jika Anda ingin melihat Docker secara lebih mendalam, kami sarankan untuk memeriksa dokumentasinya, di mana Anda akan menemukan semua informasi yang Anda butuhkan untuk memulai dan menjalankan dengan docker.


Docker
  1. Bagaimana membangun wadah Docker Ilmu Data Anaconda Python

  2. Cara Menjalankan MySQL Dalam Wadah Docker

  3. Cara SSH Ke Wadah Docker

  1. Cara Menjalankan Perintah di Running Docker Container

  2. Cara Menetapkan IP Statis ke Wadah Docker

  3. Cara Berbagi Data Antar Wadah Docker

  1. Cara menginstal WordPress menggunakan Docker

  2. Bagaimana Cara Menjalankan Program Di Dalam Wadah Docker?

  3. Cara Mendaftar Kontainer Docker