Kontainer Docker hanyalah lingkungan yang terisolasi. Setiap wadah memiliki sistem file sendiri yang tidak dapat diakses langsung oleh wadah lain atau host Anda.
Terkadang, container mungkin perlu berbagi data. Meskipun Anda harus bertujuan agar wadah mandiri, ada situasi di mana berbagi data tidak dapat dihindari. Ini mungkin untuk wadah sekunder untuk mengakses cache terintegrasi, menggunakan database yang didukung file, melakukan pencadangan, atau melakukan operasi pada data yang dibuat pengguna, seperti wadah pengoptimal gambar yang memproses gambar profil yang diunggah melalui wadah server web terpisah .
Dalam panduan ini, kita akan melihat beberapa metode untuk melewatkan data di antara container Docker Anda. Kami menganggap Anda telah menyiapkan Docker dan terbiasa dengan konsep dasar seperti wadah, gambar, volume, dan jaringan.
Menggunakan Volume untuk Berbagi Direktori
Volume adalah cara de facto untuk mengatur berbagi data. Ini adalah sistem file independen yang menyimpan datanya di luar wadah individu mana pun. Memasang volume pada jalur sistem file di dalam wadah menyediakan akses baca-tulis ke data volume.
Volume dapat dilampirkan ke beberapa wadah sekaligus. Ini memfasilitasi berbagi data tanpa batas dan ketekunan yang dikelola oleh Docker.
Buat volume untuk memulai dengan:
docker volume create --name shared-data
Selanjutnya buat wadah Anda, pasang volume ke jalur sistem file yang diharapkan 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 wadah akan mendapatkan akses efektif ke example wadah /data direktori. Ini akan dipasang sebagai /backup-source; perubahan yang dibuat oleh salah satu wadah tercermin dalam wadah lainnya.
Memulai Kontainer dengan Cepat Dengan Volume yang Kompatibel
Contoh di atas dapat disederhanakan menggunakan docker run perintah --volumes-frombendera 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 kontainer akan menerima shared-data volume terpasang di atasnya /data direktori. Itu --volumes-from flag mengambil semua definisi volume yang dilampirkan example wadah Ini sangat baik untuk pekerjaan pencadangan dan wadah jangka pendek lainnya yang berfungsi sebagai komponen tambahan untuk layanan utama Anda.
Meningkatkan Keamanan Menggunakan Dudukan Hanya-Baca
Volume selalu dipasang dalam mode baca-tulis secara default. Semua kontainer Anda yang memiliki akses ke volume diizinkan untuk mengubah isinya, yang berpotensi menyebabkan kehilangan data yang tidak disengaja.
Ini adalah praktik terbaik untuk memasang volume bersama dalam mode baca-saja ketika wadah tidak diharapkan untuk membuat perubahan. Dalam contoh di atas, backup wadah hanya perlu membaca konten shared-data jumlah Menyetel mount ke mode read-only memberlakukan harapan 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
Tambahan ro sebagai parameter ketiga yang dipisahkan oleh titik dua di -v bendera menunjukkan bahwa volume harus dipasang dalam mode read-only. Anda juga bisa menulis readonly daripada ro sebagai alternatif yang lebih eksplisit.
Berbagi Data dalam Jaringan
Anda dapat menggunakan pertukaran jaringan sebagai pendekatan alternatif untuk berbagi data melalui volume sistem file. Bergabung dengan dua kontainer di jaringan Docker yang sama memungkinkan mereka untuk 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 berkomunikasi dengan data satu sama lain.
Melanjutkan contoh pencadangan, sekarang Anda backup wadah dapat membuat permintaan jaringan ke untuk mendapatkan data untuk cadangan. Itu example wadah harus merespons dengan arsip yang berisi semua data yang perlu disimpan. Wadah cadangan kemudian bertanggung jawab untuk menyimpan arsip ke lokasi penyimpanan yang sesuai.
Menegakkan bahwa berbagi data terjadi melalui jaringan sering membantu upaya decoupling. Anda akan memiliki antarmuka yang jelas yang tidak membuat ketergantungan yang sulit antar layanan. Akses data dapat dikontrol secara lebih tepat dengan mengekspos API untuk setiap tipe data, daripada memberikan setiap kontainer akses total ke suatu volume.
Penting untuk mempertimbangkan keamanan jika Anda menggunakan teknik 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 ke 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. Namun, Anda dapat berbagi data dengan membuat volume yang dipasang di semua penampung yang berpartisipasi. Menggunakan jaringan Docker bersama adalah opsi alternatif yang menyediakan isolasi yang lebih kuat dalam situasi di mana komunikasi sistem file langsung tidak diperlukan.
Ini adalah praktik yang baik untuk membatasi interaksi antar-kontainer sebanyak mungkin. Kasus di mana Anda memerlukan berbagi data harus didefinisikan dengan jelas untuk menghindari integrasi yang ketat dari layanan Anda. Wadah dengan ketergantungan ketat pada data dari satu lagi Wadah dapat menjadi lebih rumit untuk diterapkan dan dipelihara dari waktu ke waktu, sehingga mengurangi manfaat containerisasi dan isolasi yang lebih luas.

