Skillversitas

Docker Data Storage

Docker provides several ways to store data: volumes, bind mounts, and tmpfs.

Storage Comparison

Type Persistent Performance Sharing
Volumes Yes High Controlled
Bind Mounts Yes Depends on host Flexible
Tmpfs No Very high No

Volumes

# Create a volume
docker volume create myvolume

# List volumes
docker volume ls

# Delete a volume
docker volume rm myvolume
docker volume prune

Bind Mounts

# Mount a directory
docker run -d -v /host/path:/container/path myapp

# Mount read-only
docker run -d -v /host/path:/container/path:ro myapp

# Mount a file
docker run -d -v /host/config.json:/app/config.json myapp

Tmpfs

# Mount in memory
docker run -d --tmpfs /app/temp:rw,size=100m myapp

Use Case: Application Storage

version: '3.8'

services:
  database:
    image: postgres:15
    volumes:
      - db-data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  api:
    build: ./backend
    volumes:
      - ./src:/app/src
      - uploads:/app/uploads

  nginx:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - static-files:/usr/share/nginx/html

volumes:
  db-data:
  uploads:
  static-files:

Everyday Use Case

Case: A developer needs persistent data.

# Back up a volume
docker run --rm \
  -v db-data:/source:ro \
  -v $(pwd):/backup \
  alpine tar czf /backup/db.tar.gz -C /source .

# Restore a volume
docker run --rm \
  -v db-data:/target \
  -v $(pwd):/backup \
  alpine tar xzf /backup/db.tar.gz -C /target

Best Practices

  1. Use named volumes: For important data
  2. Use bind mounts: For development
  3. Back up regularly: Schedule backups
  4. Delete unused ones: docker volume prune

Conclusion

Choose the right storage type. Named volumes for important data, bind mounts for development.