Sharing Data #

Salah satu kekuatan utama Docker adalah kemampuannya menjalankan banyak container secara terisolasi namun tetap bisa saling berbagi data jika dibutuhkan. Dalam praktik nyata, hampir tidak ada aplikasi modern yang benar-benar berdiri sendiri. Biasanya ada kombinasi web server, database, cache, worker, dan service lain yang semuanya perlu mengakses data tertentu secara bersama.

Tanpa mekanisme sharing data yang benar, kita bisa menghadapi masalah seperti:

  • Data hilang saat container mati
  • Data tidak konsisten antar service
  • Sulit melakukan backup dan migrasi

Docker menyediakan beberapa pendekatan resmi dan terstruktur untuk melakukan sharing data antar container, masing-masing dengan karakteristik, kelebihan, dan trade-off tersendiri.

Diagram Konsep Sharing Data Antar Container #

Diagram berikut menggambarkan dua container yang berbagi data melalui Docker Volume:

+-------------------+        +-------------------+
|   Container A     |        |   Container B     |
|                   |        |                   |
|  /app/data        |        |  /var/data        |
|       |           |        |       |           |
+-------|-----------+        +-------|-----------+
        |                            |
        +----------- Volume ---------+
                    (Docker Volume)

Pada diagram di atas:

  • Container A dan Container B memiliki filesystem masing-masing
  • Keduanya meng-mount Docker Volume yang sama
  • Perubahan data di volume akan langsung terlihat oleh kedua container

Mengapa Dibutuhkan? #

Beberapa use case umum:

  1. Web Server & Application Server Web server (Nginx) membaca file static yang dihasilkan oleh application container.

  2. Application & Database Data database perlu disimpan secara persisten dan dapat diakses ulang meskipun container database direstart.

  3. Producer & Consumer (Worker) Satu container menulis file, container lain memproses file tersebut.

  4. Logging & Monitoring Banyak container menulis log ke satu lokasi yang sama.


Metode Sharing Data Antar Container #

Secara umum, ada tiga pendekatan utama:

  1. Docker Volume (recommended)
  2. Bind Mount
  3. Volume Container (legacy / pattern lama)

Mari kita bahas satu per satu secara mendalam.


Docker Volume #

Apa itu Docker Volume? #

Docker Volume adalah mekanisme resmi Docker untuk menyimpan dan berbagi data yang dikelola langsung oleh Docker Engine.

Ciri utama:

  • Disimpan di host (biasanya /var/lib/docker/volumes)
  • Tidak terikat lifecycle container
  • Bisa di-mount ke banyak container
  • Aman untuk production

Cara Kerja Docker Volume #

  • Docker membuat volume terpisah dari filesystem container
  • Container hanya melihat hasil mount, bukan lokasi fisik di host
  • Docker mengatur permission, lifecycle, dan cleanup

Contoh Penggunaan #

Membuat volume:

docker volume create shared-data

Menggunakan volume di dua container:

docker run -d \
  --name app1 \
  -v shared-data:/app/data \
  my-app-image
docker run -d \
  --name app2 \
  -v shared-data:/var/data \
  my-worker-image

Sekarang:

  • File yang ditulis app1 di /app/data
  • Bisa langsung dibaca oleh app2 di /var/data

Kelebihan Docker Volume #

  • ✅ Direkomendasikan untuk production
  • ✅ Lifecycle data terpisah dari container
  • ✅ Mudah di-backup dan restore
  • ✅ Bisa digunakan lintas container dan service

Kekurangan Docker Volume #

  • ❌ Lokasi fisik di host tidak transparan
  • ❌ Perlu tooling tambahan untuk inspect data langsung

Bind Mount #

Apa itu Bind Mount? #

Bind mount adalah teknik me-mount direktori host langsung ke container.

Diagram sederhananya:

Host Directory (/data/shared)
        |
        v
+-------------------+
|   Container A     |
|  /app/data        |
+-------------------+

Contoh Penggunaan Bind Mount #

docker run -d \
  --name app1 \
  -v /data/shared:/app/data \
  my-app-image

Container lain:

docker run -d \
  --name app2 \
  -v /data/shared:/var/data \
  my-worker-image

Kelebihan Bind Mount #

  • ✅ Sangat fleksibel
  • ✅ Mudah untuk development
  • ✅ Bisa langsung melihat file di host

Kekurangan Bind Mount #

  • ❌ Bergantung pada struktur filesystem host
  • ❌ Lebih rawan error permission
  • ❌ Kurang portable
  • ❌ Tidak ideal untuk production

Kapan Bind Mount Digunakan? #

  • Local development
  • Hot reload source code
  • Debugging

Volume Container (Legacy Pattern) #

Apa itu Volume Container? #

Volume container adalah pola lama di mana satu container khusus dibuat hanya untuk menyimpan volume, lalu container lain menggunakan volume tersebut.

Contoh:

docker create \
  --name data-container \
  -v /shared-data \
  busybox

Container lain:

docker run -d \
  --volumes-from data-container \
  my-app-image

Status Saat Ini #

  • ⚠️ Sudah jarang digunakan
  • ⚠️ Tidak direkomendasikan untuk arsitektur modern
  • ⚠️ Digantikan oleh Docker Volume

Sharing Data di Docker Compose #

Dalam praktik nyata, sharing data hampir selalu dilakukan lewat Docker Compose.

Contoh docker-compose.yml #

version: "3.9"

services:
  app:
    image: my-app
    volumes:
      - shared-data:/app/data

  worker:
    image: my-worker
    volumes:
      - shared-data:/var/data

volumes:
  shared-data:

Keuntungan:

  • Definisi volume jelas
  • Mudah dikelola
  • Reproducible

Best Practice #

  1. Gunakan Docker Volume untuk Production Hindari bind mount kecuali untuk development.

  2. Pisahkan Data dan Logic Container seharusnya stateless, data disimpan di volume.

  3. Perhatikan Permission & Ownership Pastikan user di dalam container memiliki akses ke volume.

  4. Jangan Gunakan Volume untuk Komunikasi Real-Time Untuk komunikasi antar service, gunakan:

    • HTTP / gRPC
    • Message Queue
    • Event Streaming
  5. Backup Volume Secara Berkala Volume adalah aset paling berharga di sistem containerized.


Kesimpulan #

Sharing data antar container adalah konsep fundamental dalam Docker dan arsitektur aplikasi modern. Docker menyediakan beberapa mekanisme, namun Docker Volume adalah solusi paling aman, fleksibel, dan direkomendasikan untuk hampir semua kebutuhan production.

Dengan memahami perbedaan antara Docker Volume, Bind Mount, dan pola lama seperti Volume Container, kita bisa merancang sistem yang:

  • Lebih stabil
  • Mudah dirawat
  • Aman dari kehilangan data
About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact