Docker Volumes & Data — DevOps

Mengapa Perlu Volume? Container bersifat ephemeral — saat dihapus, semua data di dalamnya hilang. Volume memungkinkan data persist di luar lifecycle container.

Mengapa Perlu Volume?

Container bersifat ephemeral — saat dihapus, semua data di dalamnya hilang. Volume memungkinkan data persist di luar lifecycle container.

Jenis Mount di Docker

Named Volume

# Buat volume
docker volume create db-data

# Gunakan volume
docker run -d \
  --name postgres \
  -v db-data:/var/lib/postgresql/data \
  postgres:16

# List volumes
docker volume ls

# Inspect volume
docker volume inspect db-data

# Hapus volume
docker volume rm db-data
docker volume prune    # hapus semua unused

Bind Mount (untuk Development)

# Mount source code ke container (hot reload)
docker run -d \
  -v $(pwd):/app \
  -v /app/node_modules \
  -p 3000:3000 \
  my-app

# $(pwd):/app = map current dir ke /app di container
# /app/node_modules = anonymous volume, jangan override

Volume di Docker Compose

services:
  db:
    image: postgres:16
    volumes:
      - postgres_data:/var/lib/postgresql/data    # named volume
      - ./init.sql:/docker-entrypoint-initdb.d/   # bind mount

  app:
    build: .
    volumes:
      - .:/app            # bind mount (development)
      - /app/node_modules # anonymous volume

volumes:
  postgres_data:          # deklarasi named volume

Yang akan kamu pelajari