Docker Volumes & Persistence

By default, all data inside a container is ephemeral and deleted when the container is removed. Docker Volumes persist data permanently outside container lifecycles.

1. Named Volumes vs Bind Mounts

TypeStorage LocationPrimary Use CaseSyntax Example
Named VolumeManaged by Docker in /var/lib/docker/volumes/Databases (PostgreSQL, MongoDB, MySQL, Redis)-v pgdata:/var/lib/postgresql/data
Bind MountAny specific path on Host Machine filesystemLocal Source Code hot-reloading during development-v $(pwd)/src:/app/src

2. Persistent PostgreSQL Database Example

# 1. Create a named volume
docker volume create postgres_data

# 2. Run PostgreSQL with volume attached
docker run -d \
  --name my-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -v postgres_data:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:15-alpine

3. Local Development Code Hot-Reloading (Bind Mount)

# Mount local working directory $(pwd) into container /app
docker run -d \
  --name dev-api \
  -p 3000:3000 \
  -v $(pwd):/app \
  node:18-alpine npm run dev

Next Up

Learn Docker Networking: bridge networks, host networks, overlay networks, and inter-container DNS communication.

Next Lesson: Docker Networking →