DEV Community

Cover image for Docker Volumes Explained with docker-compose
Athreya aka Maneshwar
Athreya aka Maneshwar

Posted on

Docker Volumes Explained with docker-compose

Hi there! I'm Maneshwar. Right now, I’m building LiveAPI, a first-of-its-kind tool that helps you automatically index API endpoints across all your repositories. LiveAPI makes it easier to discover, understand, and interact with APIs in large infrastructures.


When working with containers, managing data is just as important as running the app.

Docker offers multiple ways to handle data persistence and sharing—volumes.

Let’s break down the different types of volumes and how to use them with docker-compose.

1. Named Volumes

Docker manages these under /var/lib/docker/volumes. You define and reference them by name.

Example:

version: '3.8'

services:
  db:
    image: postgres:15
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
Enter fullscreen mode Exit fullscreen mode
  • Volume pgdata will persist even if the container is removed.
  • It can be reused by other services too.

2. Anonymous Volumes

No name given. Docker generates a random volume ID.

Example:

version: '3.8'

services:
  app:
    image: myapp
    volumes:
      - /var/www/data
Enter fullscreen mode Exit fullscreen mode
  • The /var/www/data path in the container is backed by a randomly created volume.
  • These are not easily reusable and can pile up if not managed.

3. Bind Mounts

Mounts a specific path from the host directly into the container.

Example:

version: '3.8'

services:
  web:
    image: nginx
    volumes:
      - ./html:/usr/share/nginx/html:ro
Enter fullscreen mode Exit fullscreen mode
  • Changes on your host (./html) reflect live inside the container.
  • Ideal for local development and live reloading.

4. tmpfs Mounts

A mount in RAM. Fast and volatile—data disappears after container stops.

Example:

version: '3.8'

services:
  scratch:
    image: alpine
    command: sleep 3600
    tmpfs:
      - /tmp/cache
Enter fullscreen mode Exit fullscreen mode
  • Good for scratch space, secrets, build caches, or anything ephemeral.

5. Volume Plugins / External Volumes

For using storage from NFS, cloud providers, etc.

Example with external NFS volume:

version: '3.8'

services:
  app:
    image: myapp
    volumes:
      - nfs-data:/data

volumes:
  nfs-data:
    driver: local
    driver_opts:
      type: nfs
      o: addr=192.168.1.100,rw
      device: ":/exported/path"
Enter fullscreen mode Exit fullscreen mode
  • Useful in cluster setups or multi-host Docker environments.

Quick Recap

Type Persist Host Access Good For
Named Volume App data (db, logs)
Anonymous Volume Ephemeral container data
Bind Mount Local dev, config files
tmpfs Temp data, secrets, cache
Plugin/Remote varies Multi-host or cloud storage

Final Tip

To inspect volumes:

docker volume ls
docker volume inspect <volume_name>
Enter fullscreen mode Exit fullscreen mode

To clean up unused:

docker volume prune
Enter fullscreen mode Exit fullscreen mode

LiveAPI helps you get all your backend APIs documented in a few minutes.

With LiveAPI, you can generate interactive API docs that allow users to search and execute endpoints directly from the browser.

LiveAPI Demo

If you're tired of updating Swagger manually or syncing Postman collections, give it a shot.

Top comments (0)