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

Cara Berbagi Data Antar Wadah Docker

Kontainer Docker adalah lingkungan yang sengaja diisolasi. Setiap container memiliki sistem file sendiri yang tidak dapat diakses langsung oleh container lain atau host Anda.

Terkadang container mungkin perlu berbagi data. Meskipun Anda harus bertujuan agar wadah mandiri, ada skenario di mana berbagi data tidak dapat dihindari. Ini mungkin agar wadah kedua dapat mengakses cache gabungan, menggunakan basis data yang didukung file, membuat cadangan, atau melakukan operasi pada data yang dibuat pengguna, seperti wadah pengoptimal gambar yang memproses foto profil yang diunggah melalui wadah server web terpisah .

Dalam panduan ini, kita akan melihat beberapa metode untuk meneruskan data di antara container Docker Anda. Kami akan menganggap Anda sudah menyiapkan Docker dan memahami konsep dasar seperti container, gambar, volume, dan jaringan.

Menggunakan Volume untuk Berbagi Direktori

Volume adalah cara de facto untuk mengatur berbagi data. Mereka adalah sistem file independen yang menyimpan data mereka di luar wadah individu mana pun. Memasang volume ke jalur sistem file dalam wadah memberikan akses baca-tulis ke data volume.

Volume dapat dilampirkan ke beberapa wadah secara bersamaan. Ini memfasilitasi berbagi data tanpa hambatan dan persistensi yang dikelola oleh Docker.

Buat volume untuk memulai:

docker volume create --name shared-data

Selanjutnya buat wadah Anda, pasang volume ke jalur sistem file yang diharapkan oleh setiap gambar:

docker run -d -v shared-data:/data --name example example-image:latest
docker run -d -v shared-data:/backup-source --name backup backup-image:latest

Dalam contoh ini, backup container akan mendapatkan akses efektif ke example /data penampung direktori. Itu akan dipasang sebagai /backup-source; perubahan yang dibuat oleh salah satu wadah akan tercermin di wadah lainnya.

Memulai Kontainer dengan Cepat Dengan Volume yang Sesuai

Contoh di atas dapat disederhanakan menggunakan docker run perintah --volumes-from bendera. Ini menyediakan mekanisme untuk secara otomatis memasang volume yang sudah digunakan oleh wadah yang ada:

docker run -d --volumes-from example --name backup backup-image:latest

Kali ini backup container akan menerima shared-data volume dipasang ke /data direktori. --volumes-from flag menarik semua definisi volume yang dilampirkan ke example wadah. Ini sangat ideal untuk pekerjaan pencadangan dan container berumur pendek lainnya yang bertindak sebagai komponen tambahan untuk layanan utama Anda.

Meningkatkan Keamanan Dengan Mount Hanya-Baca

Volume selalu dipasang dalam mode baca-tulis secara default. Semua container Anda yang memiliki akses ke suatu volume diizinkan untuk mengubah isinya, yang berpotensi menyebabkan hilangnya data yang tidak diinginkan.

Ini adalah praktik terbaik untuk memasang volume bersama dalam mode hanya-baca ketika penampung tidak diharapkan untuk membuat modifikasi. Pada contoh di atas, backup container hanya perlu membaca konten shared-data volume. Menyetel mount ke mode read-only akan memberlakukan ekspektasi ini, mencegah bug atau binari berbahaya dalam gambar menghapus data yang digunakan oleh example wadah.

docker run -d -v shared-data:/backup-source:ro --name backup backup-image:latest

Menambahkan ro sebagai parameter yang dipisahkan titik dua ketiga ke -v flag menunjukkan volume harus dipasang dalam mode read-only. Anda juga dapat menulis readonly bukannya ro sebagai alternatif yang lebih eksplisit.

Berbagi Data Melalui Jaringan

Anda dapat menggunakan pertukaran jaringan sebagai pendekatan alternatif untuk berbagi data melalui volume sistem file. Menggabungkan dua kontainer ke jaringan Docker yang sama memungkinkan mereka berkomunikasi dengan lancar menggunakan nama host yang ditetapkan secara otomatis:

docker network create demo-network
docker run -d --net demo-network --name first example-image:latest
docker run -d --net demo-network --name second another-image:latest

Di sini first akan dapat melakukan ping second dan sebaliknya. Kontainer Anda dapat menjalankan layanan HTTP API yang memungkinkannya berinteraksi dengan data satu sama lain.

Melanjutkan contoh pencadangan, sekarang backup container dapat membuat permintaan jaringan ke http://example:8080/backup-data untuk memperoleh data untuk cadangan. example wadah harus merespons dengan arsip yang berisi semua data yang perlu disimpan. Penampung cadangan kemudian bertanggung jawab untuk menyimpan arsip ke lokasi penyimpanan yang sesuai.

Menegakkan bahwa berbagi data terjadi melalui jaringan sering membantu upaya decoupling. Anda berakhir dengan antarmuka yang jelas yang tidak membuat ketergantungan keras antar layanan. Akses data dapat dikontrol secara lebih tepat dengan memaparkan API untuk setiap tipe data, alih-alih memberikan setiap kontainer akses total ke sebuah volume.

Penting untuk mempertimbangkan keamanan jika Anda menggunakan pendekatan ini. Pastikan API HTTP apa pun yang dirancang untuk akses internal oleh wadah Docker Anda yang lain tidak memiliki port yang terbuka di jaringan jembatan host Docker Anda. Ini adalah perilaku default saat menggunakan opsi jaringan yang ditunjukkan di atas; mengikat port dengan -p 8080:8080 akan mengizinkan akses ke API cadangan melalui antarmuka jaringan host Anda. Ini akan menjadi masalah keamanan.

Ringkasan

Wadah Docker adalah lingkungan terisolasi yang tidak dapat mengakses sistem file satu sama lain. Meskipun demikian, Anda dapat berbagi data dengan membuat volume yang dipasang ke semua wadah yang berpartisipasi. Menggunakan jaringan Docker bersama adalah opsi alternatif yang memberikan pemisahan yang lebih kuat dalam skenario di mana interaksi sistem file langsung tidak diperlukan.

Ini adalah praktik yang baik untuk membatasi interaksi antar-kontainer sejauh mungkin. Kasus di mana Anda memerlukan berbagi data harus didefinisikan dengan jelas untuk menghindari penggabungan layanan Anda secara erat. Wadah yang memiliki ketergantungan kaku pada data dari lainnya container bisa lebih sulit untuk diterapkan dan dipelihara dari waktu ke waktu, mengikis manfaat containerisasi dan isolasi yang lebih luas.


Docker
  1. Cara Membuat, Mendaftar &Menghapus Wadah Docker di Linux

  2. Bagaimana membangun wadah Docker Ilmu Data Anaconda Python

  3. Cara Berbagi Data antara Wadah Docker di Ubuntu 22.04

  1. Cara Mendaftar Kontainer Docker

  2. Cara mencadangkan dan memulihkan wadah Docker

  3. Cara Menjeda dan Melanjutkan Wadah Docker

  1. Cara Berbagi Data Antar Wadah Docker

  2. Cara Mendaftar / Memulai / Menghentikan Kontainer Docker

  3. Bagaimana Mengelola Kontainer Docker? Praktik terbaik