Volume #

Dalam dunia container, data adalah hal paling rentan untuk hilang. Container bersifat ephemeral (sementara): ketika container dihapus, maka seluruh filesystem di dalamnya ikut hilang. Di sinilah Docker Volume berperan.

Docker Volume adalah mekanisme resmi Docker untuk menyimpan dan mengelola data secara persisten, terpisah dari lifecycle container. Agar konsep ini mudah dipahami, mari lihat diagram sederhana berikut.

+--------------------+        +----------------------+
|    Container A     |        |    Container B       |
|                    |        |                      |
|  /app/data  -------+--------+------> Docker Volume |
|                    |        |                      |
+--------------------+        +----------------------+
                                      |
                                      v
                             +----------------------+
                             |   Host / Storage     |
                             | (Disk / Network FS)  |
                             +----------------------+

Penjelasan diagram:

  • Dua container dapat mengakses volume yang sama.
  • Volume dikelola Docker, bukan oleh container.
  • Data tetap ada meskipun container dihentikan atau dihapus.

Apa Itu Docker Volume? #

Docker Volume adalah direktori khusus yang:

  • Disimpan di luar filesystem container
  • Dikelola penuh oleh Docker
  • Digunakan untuk menyimpan data secara persisten

Secara teknis, volume berada di host (biasanya di /var/lib/docker/volumes/), tetapi container tidak perlu tahu lokasi fisiknya.

Docker Volume dirancang untuk:

  • Database (MySQL, PostgreSQL, Redis)
  • Upload file (gambar, dokumen)
  • Cache
  • Shared data antar container

Mengapa Docker Volume Dibutuhkan? #

Tanpa volume:

  • Data hilang saat container dihapus
  • Sulit melakukan backup
  • Tidak bisa sharing data antar container

Dengan volume:

  • Data persisten
  • Container bisa stateless
  • Mudah backup, restore, dan migrasi

Prinsip penting dalam arsitektur modern:

Container bersifat stateless, data bersifat stateful dan hidup di luar container.


Jenis-Jenis Storage di Docker #

Docker menyediakan beberapa mekanisme penyimpanan:

Ciri-ciri:

  • Dikelola oleh Docker
  • Aman dan portable
  • Mendukung volume driver (NFS, cloud storage, dll)

Contoh:

docker volume create app-data

Bind Mount #

Menghubungkan direktori host langsung ke container.

Ciri-ciri:

  • Bergantung pada struktur host
  • Cocok untuk local development
  • Kurang portable

Contoh:

docker run -v ./data:/app/data app

tmpfs Mount #

Data disimpan di memory (RAM).

Ciri-ciri:

  • Sangat cepat
  • Hilang saat container stop
  • Cocok untuk secret atau cache sensitif

Cara Kerja Docker Volume #

Saat container dijalankan:

  1. Docker membuat atau menemukan volume
  2. Volume di-mount ke path di container
  3. Container membaca/menulis data ke volume
  4. Data disimpan di host, bukan di container

Jika container dihapus:

  • Filesystem container hilang
  • Volume tetap ada

Contoh Penggunaan Docker Volume #

Menggunakan Docker CLI #

docker volume create db-data

docker run -d \
  --name mysql \
  -v db-data:/var/lib/mysql \
  mysql:8

Di sini:

  • /var/lib/mysql adalah lokasi data MySQL
  • Data tetap ada meskipun container MySQL dihapus

Menggunakan Docker Compose #

version: "3.9"
services:
  db:
    image: postgres:15
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Keuntungan:

  • Deklaratif
  • Mudah dipindahkan ke environment lain

Sharing Volume Antar Container #

Docker Volume memungkinkan beberapa container mengakses data yang sama.

Use case umum:

  • Nginx + PHP-FPM
  • App + Worker
  • Backup service

Contoh:

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

  worker:
    volumes:
      - shared-data:/data

volumes:
  shared-data:

Volume Driver #

Docker mendukung volume driver, memungkinkan integrasi dengan storage eksternal:

  • local (default)
  • NFS
  • Amazon EBS / EFS
  • Google Persistent Disk
  • Azure Disk

Ini penting untuk:

  • Production
  • High availability
  • Multi-host environment

Backup & Restore Volume #

Backup #

docker run --rm \
  -v db-data:/data \
  -v $(pwd):/backup \
  busybox \
  tar czf /backup/db-data.tar.gz /data

Restore #

docker run --rm \
  -v db-data:/data \
  -v $(pwd):/backup \
  busybox \
  tar xzf /backup/db-data.tar.gz -C /

Kesalahan Umum #

  • Menyimpan data penting di dalam container
  • Menghapus volume tanpa backup
  • Menggunakan bind mount di production
  • Tidak memahami sharing volume

Best Practice #

  1. Gunakan Docker Volume untuk production
  2. Hindari bind mount di production
  3. Pisahkan data dan aplikasi
  4. Beri nama volume secara eksplisit
  5. Backup volume secara berkala
  6. Gunakan volume driver untuk multi-host

Penutup #

Docker Volume adalah fondasi utama untuk membangun aplikasi container yang aman, scalable, dan production-ready. Tanpa volume, container hanya cocok untuk eksperimen. Dengan volume, container siap digunakan untuk sistem nyata.

Memahami volume berarti memahami pemisahan antara aplikasi dan data, sebuah prinsip penting dalam arsitektur cloud-native dan microservices.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact