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

Cara Berbagi Data antara Wadah Docker di Ubuntu 22.04

Pengantar

Docker adalah alat containerization populer yang digunakan untuk menyediakan aplikasi perangkat lunak dengan sistem file yang berisi semua yang mereka butuhkan untuk dijalankan. Menggunakan container Docker memastikan bahwa perangkat lunak akan berperilaku dengan cara yang sama di mana pun ia di-deploy karena lingkungan run-time-nya konsisten.

Secara umum, wadah Docker bersifat sementara, berjalan selama yang diperlukan untuk menyelesaikan perintah yang dikeluarkan dalam wadah. Namun, terkadang aplikasi perlu berbagi akses ke data atau menyimpan data setelah penampung dihapus. Basis data, konten yang dibuat pengguna untuk situs web, dan file log hanyalah beberapa contoh data yang tidak praktis atau tidak mungkin disertakan dalam gambar Docker tetapi aplikasi mana yang perlu diakses. Akses persisten ke data disediakan dengan Volume Docker.

Volume Docker dapat dibuat dan dilampirkan dalam perintah yang sama yang membuat wadah, atau dapat dibuat secara independen dari wadah apa pun dan dilampirkan nanti. Dalam artikel ini, Anda akan melihat empat cara berbeda untuk berbagi data antar container.

Prasyarat

Untuk mengikuti artikel ini, Anda memerlukan server Ubuntu 22.04 dengan yang berikut:

  • Pengguna non-root dengan hak istimewa sudo. Panduan Pengaturan Server Awal dengan Ubuntu 22.04 menjelaskan cara mengaturnya.
  • Docker diinstal dengan instruksi dari Langkah 1 dan Langkah 2 Cara Menginstal dan Menggunakan Docker di Ubuntu 22.04

Catatan: Meskipun Prasyarat memberikan instruksi untuk menginstal Docker di Ubuntu 22.04, docker perintah untuk volume data Docker dalam artikel ini harus bekerja pada sistem operasi lain selama Docker diinstal dan pengguna sudo telah ditambahkan ke docker grup.

Langkah 1 — Membuat Volume Independen

Diperkenalkan dalam rilis Docker 1.9, docker volume create perintah memungkinkan Anda untuk membuat volume tanpa menghubungkannya dengan wadah tertentu. Anda akan menggunakan perintah ini untuk menambahkan volume bernama DataVolume1 :

  1. docker volume create --name DataVolume1

Nama ditampilkan, menunjukkan bahwa perintah berhasil:

OutputDataVolume1

Untuk memanfaatkan volume, Anda akan membuat wadah baru dari gambar Ubuntu, menggunakan --rm tandai untuk menghapusnya secara otomatis saat Anda keluar. Anda juga akan menggunakan -v untuk memasang volume baru. -v memerlukan nama volume, titik dua, lalu jalur absolut ke tempat volume akan muncul di dalam wadah. Jika direktori di jalur tidak ada sebagai bagian dari gambar, mereka akan dibuat saat perintah dijalankan. Jika mereka melakukannya ada, volume yang dipasang akan menyembunyikan konten yang ada:

  1. docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu

Saat berada di wadah, tulis beberapa data ke volume:

  1. echo "Example1" > /datavolume1/Example1.txt

Karena Anda menggunakan --rm bendera, wadah Anda akan dihapus secara otomatis saat Anda keluar. Namun, volume Anda akan tetap dapat diakses.

  1. exit

Anda dapat memverifikasi bahwa volume ada di sistem Anda dengan docker volume inspect :

  1. docker volume inspect DataVolume1
Output[
    {
        "CreatedAt": "2018-07-11T16:57:54Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/DataVolume1/_data",
        "Name": "DataVolume1",
        "Options": {},
        "Scope": "local"
    }
]

Catatan: Anda bahkan dapat melihat data pada host di jalur yang terdaftar sebagai Mountpoint . Namun, Anda harus menghindari mengubahnya, karena dapat menyebabkan kerusakan data jika aplikasi atau container tidak mengetahui adanya perubahan.

Selanjutnya, mulai wadah baru dan lampirkan DataVolume1 :

  1. docker run --rm -ti -v DataVolume1:/datavolume1 ubuntu

Verifikasi isinya:

  1. cat /datavolume1/Example1.txt
OutputExample1

Keluar dari wadah:

  1. exit

Dalam contoh ini, Anda membuat volume, melampirkannya ke penampung, dan memverifikasi persistensinya.

Langkah 2 — Membuat Volume yang Bertahan saat Penampung Dihapus

Pada contoh berikutnya, Anda akan membuat volume bersamaan dengan wadah, menghapus wadah, lalu melampirkan volume ke wadah baru.

Anda akan menggunakan docker run perintah untuk membuat wadah baru menggunakan gambar dasar Ubuntu. -t akan memberi kita terminal, dan -i akan memungkinkan kita untuk berinteraksi dengannya. Untuk kejelasan, Anda akan menggunakan --name untuk mengidentifikasi wadah.

-v flag akan memungkinkan kami untuk membuat volume baru, yang Anda sebut DataVolume2 . Anda akan menggunakan titik dua untuk memisahkan nama ini dari jalur tempat volume harus dipasang di penampung. Terakhir, Anda akan menentukan gambar dasar Ubuntu dan mengandalkan perintah default di file Docker gambar dasar Ubuntu, bash , untuk memasukkan kami ke dalam cangkang:

  1. docker run -ti --name=Container2 -v DataVolume2:/datavolume2 ubuntu

Catatan: -v bendera sangat fleksibel. Itu dapat mengikat atau memberi nama volume hanya dengan sedikit penyesuaian sintaks. Jika argumen pertama dimulai dengan / atau ~/ Anda membuat bindmount. Hapus itu, dan Anda menamai volumenya. Misalnya:

  • -v /path:/path/in/container mount direktori host, /path di /path/in/container
  • -v path:/path/in/container membuat volume bernama path tanpa hubungan dengan tuan rumah.

Untuk informasi lebih lanjut tentang mengikat direktori dari host, lihat Cara Berbagi Data antara Docker Container dan Host

Saat berada di wadah, Anda akan menulis beberapa data ke volume:

  1. echo "Example2" > /datavolume2/Example2.txt
  2. cat /datavolume2/Example2.txt
OutputExample2

Keluar dari wadah:

  1. exit

Saat Anda memulai ulang wadah, volume akan dipasang secara otomatis:

  1. docker start -ai Container2

Pastikan volume sudah terpasang dan data Anda masih ada:

  1. cat /datavolume2/Example2.txt
OutputExample2

Terakhir, keluar dan bersihkan:

  1. exit

Docker tidak akan mengizinkan kami menghapus volume jika direferensikan oleh sebuah wadah. Untuk melihat apa yang terjadi, coba:

  1. docker volume rm DataVolume2

Pesan tersebut memberi tahu kami bahwa volume masih digunakan dan memasok ID penampung versi panjang:

OutputError response from daemon: unable to remove volume: remove DataVolume2: volume is in use - [d0d2233b668eddad4986313c7a4a1bc0d2edaf0c7e1c02a6a6256de27db17a63]

Anda dapat menggunakan ID dalam pesan kesalahan di atas untuk menghapus penampung:

  1. docker rm d0d2233b668eddad4986313c7a4a1bc0d2edaf0c7e1c02a6a6256de27db17a63
Outputd0d2233b668eddad4986313c7a4a1bc0d2edaf0c7e1c02a6a6256de27db17a63

Melepaskan wadah tidak akan memengaruhi volume. Anda dapat melihatnya masih ada di sistem dengan mendaftar volume dengan docker volume ls :

  1. docker volume ls
OutputDRIVER              VOLUME NAME
local               DataVolume2

Dan Anda dapat menggunakan docker volume rm untuk menghapusnya:

  1. docker volume rm DataVolume2

Dalam contoh ini, Anda membuat volume data kosong pada saat yang sama saat Anda membuat wadah. Dalam contoh berikutnya, Anda akan mempelajari apa yang terjadi saat Anda membuat volume dengan direktori penampung yang sudah berisi data.

Langkah 3 — Membuat Volume dari Direktori yang Ada dengan Data

Umumnya, membuat volume secara mandiri dengan docker volume create dan membuatnya saat membuat wadah adalah setara, dengan satu pengecualian. Jika Anda membuat volume bersamaan dengan membuat wadah dan Anda memberikan jalur ke direktori yang berisi data dalam gambar dasar, data tersebut akan disalin ke dalam volume.

Sebagai contoh, Anda akan membuat wadah dan menambahkan volume data di /var , direktori yang berisi data dalam gambar dasar:

  1. docker run -ti --rm -v DataVolume3:/var ubuntu

Semua konten dari /var gambar dasar direktori disalin ke volume, dan Anda dapat memasang volume itu di wadah baru.

Keluar dari penampung saat ini:

  1. exit

Kali ini, daripada mengandalkan bash default gambar dasar perintah, Anda akan mengeluarkan ls Anda sendiri perintah, yang akan menampilkan isi volume tanpa memasukkan shell:

  1. docker run --rm -v DataVolume3:/datavolume3 ubuntu ls datavolume3

Direktori datavolume3 sekarang memiliki salinan konten /var gambar dasar direktori:

Outputbackups
cache
lib
local
lock
log
mail
opt
run
spool
tmp

Sepertinya Anda tidak ingin memasang /var/ dengan cara ini, tetapi ini dapat membantu jika Anda telah membuat gambar Anda sendiri dan menginginkan cara mudah untuk menyimpan data. Dalam contoh berikutnya, Anda akan mendemonstrasikan bagaimana volume dapat dibagi di antara beberapa wadah.

Langkah 4 — Berbagi Data Antara Beberapa Kontainer Docker

Sejauh ini, Anda telah melampirkan volume ke satu wadah dalam satu waktu. Seringkali, Anda ingin beberapa wadah dilampirkan ke volume data yang sama. Ini relatif mudah untuk dicapai, tetapi ada satu peringatan penting:saat ini, Docker tidak menangani penguncian file. Jika Anda memerlukan beberapa wadah untuk menulis ke volume, aplikasi yang berjalan di wadah tersebut harus dirancang untuk menulis ke penyimpanan data bersama untuk mencegah kerusakan data.

Buat Container4 dan DataVolume4

Gunakan docker run untuk membuat wadah baru bernama Container4 dengan volume data terlampir:

  1. docker run -ti --name=Container4 -v DataVolume4:/datavolume4 ubuntu

Selanjutnya Anda akan membuat file dan menambahkan beberapa teks:

  1. echo "This file is shared between containers" > /datavolume4/Example4.txt

Kemudian, Anda akan keluar dari wadah:

  1. exit

Ini mengembalikan kita ke command prompt host, di mana Anda akan membuat wadah baru yang memasang volume data dari Container4 .

Buat Container5 dan Pasang Volume dari Container4

Anda akan membuat Container5 , dan pasang volume dari Container4 :

  1. docker run -ti --name=Container5 --volumes-from Container4 ubuntu

Periksa persistensi data:

  1. cat /datavolume4/Example4.txt
OutputThis file is shared between containers

Sekarang, tambahkan beberapa teks dari Container5 :

  1. echo "Both containers can write to DataVolume4" >> /datavolume4/Example4.txt

Terakhir, Anda akan keluar dari wadah:

  1. exit

Selanjutnya, Anda akan memeriksa apakah data Anda masih ada di Container4 .

Lihat Perubahan yang Dibuat di Container5

Sekarang, periksa perubahan yang ditulis ke volume data dengan Container5 dengan memulai ulang Container4 :

  1. docker start -ai Container4

Periksa perubahannya:

  1. cat /datavolume4/Example4.txt
OutputThis file is shared between containers
Both containers can write to DataVolume4

Sekarang setelah Anda memverifikasi bahwa kedua penampung dapat membaca dan menulis dari volume data, Anda akan keluar dari penampung:

  1. exit

Sekali lagi, Docker tidak menangani penguncian file apa pun, jadi aplikasi harus akun untuk file yang mengunci sendiri. Dimungkinkan untuk memasang volume Docker sebagai hanya-baca untuk memastikan bahwa kerusakan data tidak akan terjadi secara tidak sengaja ketika sebuah wadah memerlukan akses hanya-baca dengan menambahkan :ro . Sekarang Anda akan melihat cara kerjanya.

Mulai Penampung 6 dan Pasang Volume Hanya-Baca

Setelah volume dipasang dalam wadah, daripada melepasnya seperti yang Anda lakukan dengan sistem file Linux pada umumnya, Anda dapat membuat wadah baru yang dipasang seperti yang Anda inginkan dan, jika perlu, hapus wadah sebelumnya. Untuk membuat volume hanya-baca, Anda menambahkan :ro di akhir nama wadah:

  1. docker run -ti --name=Container6 --volumes-from Container4:ro ubuntu

Anda akan memeriksa status hanya-baca dengan mencoba menghapus file contoh Anda:

  1. rm /datavolume4/Example4.txt
Outputrm: cannot remove '/datavolume4/Example4.txt': Read-only file system

Terakhir, Anda akan keluar dari wadah dan membersihkan wadah dan volume pengujian Anda:

  1. exit

Setelah selesai, bersihkan wadah dan volume Anda:

  1. docker rm Container4 Container5 Container6
  2. docker volume rm DataVolume4

Dalam contoh ini, Anda telah menunjukkan cara berbagi data antara dua penampung menggunakan volume data dan cara memasang volume data sebagai hanya-baca.

Kesimpulan

Dalam tutorial ini, Anda membuat volume data yang memungkinkan data bertahan melalui penghapusan penampung. Anda berbagi volume data antar container, dengan peringatan bahwa aplikasi perlu dirancang untuk menangani penguncian file untuk mencegah kerusakan data. Terakhir, Anda menunjukkan cara memasang volume bersama dalam mode hanya-baca. Jika Anda tertarik untuk mempelajari tentang berbagi data antara container dan sistem host, lihat Cara Berbagi Data antara Docker Container dan Host.


Docker
  1. Cara Berbagi Data antara Wadah Docker di Ubuntu 22.04

  2. Cara Mendaftar Kontainer Docker

  3. Cara Menginstal Docker dan Menjalankan Wadah Docker di Ubuntu

  1. Cara Menggunakan Tulis Docker

  2. Bagaimana Menghubungkan Kontainer Docker

  3. Cara Berbagi Data Antar Wadah Docker

  1. Cara Berbagi Data Antar Wadah Docker

  2. Cara menginstal Docker di Ubuntu 22.04

  3. Cara Menginstal Docker di Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04