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
| Type | Storage Location | Primary Use Case | Syntax Example |
|---|---|---|---|
| Named Volume | Managed by Docker in /var/lib/docker/volumes/ | Databases (PostgreSQL, MongoDB, MySQL, Redis) | -v pgdata:/var/lib/postgresql/data |
| Bind Mount | Any specific path on Host Machine filesystem | Local 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 →