Docker Cheat Sheet Series (3/5): Volumes + Networks
Short scenarios. Copy/paste commands. Minimal notes.
Use a named volume for persistent data
Goal: Keep data even if the container is removed.
docker volume create mydata
docker run --rm -d \
--name db \
-e POSTGRES_PASSWORD=postgres \
-v mydata:/var/lib/postgresql/data \
postgres:16Notes
- Named volumes are managed by Docker (preferred for databases).
Backup a volume to a tar file
Goal: Export volume contents for backup or migration.
docker run --rm \
-v mydata:/data \
-v "$PWD":/backup \
alpine:3.20 \
sh -c "tar -czf /backup/mydata.tar.gz -C /data ."Notes
- The backup file lands in your current directory.
Restore a volume from a tar backup
Goal: Rehydrate a volume from an existing archive.
docker volume create mydata_restored
docker run --rm \
-v mydata_restored:/data \
-v "$PWD":/backup \
alpine:3.20 \
sh -c "tar -xzf /backup/mydata.tar.gz -C /data"Notes
- Restore into an empty volume to avoid mixing data.
Create a user-defined network and connect services
Goal: Let containers talk to each other by name.
docker network create appnet
docker run --rm -d \
--name db \
--network appnet \
-e POSTGRES_PASSWORD=postgres \
postgres:16
docker run --rm -d \
--name api \
--network appnet \
-e DATABASE_HOST=db \
myapp:localNotes
- On a user-defined network,
dbis resolvable via DNS automatically.
Inspect + targeted cleanup (volumes/networks)
Goal: See what exists and remove only what you intend.
docker volume ls
docker volume inspect mydata
docker network ls
docker network inspect appnet
# remove when done
docker stop db api 2>/dev/null || true
docker volume rm mydata mydata_restored
docker network rm appnetNotes
- Remove volumes only if you’re sure you don’t need the data.