Difference between docker volume type – bind vs volume

When bind mounts are files coming from your host machine, volumes are something more like the nas of docker.

  • Bind mounts are files mounted from your host machine (the one that runs your docker daemon) onto your container.
  • Volumes are like storage spaces totally managed by docker.
    You will find, in the literature, two types of volumes:

    • named volumes (you provide the name of it)
    • anonymous volumes (usual UUID names from docker, like you can find them on container or untagged images)

Those volumes come with their own set of docker commands; you can also consult this list via

docker volume --help

You can see your existing volumes via

docker volume ls

You can create a named volume via

docker volume create my_named_volume

But you can also create a volume via a docker-compose file

version: "3.3"

services:
  mysql:
    image: mysql
    volumes:
      - type: volume
          source: db-data
          target: /var/lib/mysql/data

volumes:
  db-data:

Where this is the part saying please docker, mount me the volume named db-data on top of the container directory /var/lib/mysql/data

- type: volume
    source: db-data
    target: /var/lib/mysql/data

And this is the part saying to docker please create me a volume named db-data

volumes:
  db-data:

Docker documentation about the three mount types:

  • https://docs.docker.com/storage/bind-mounts/
  • https://docs.docker.com/storage/volumes/
  • https://docs.docker.com/storage/tmpfs/

Leave a Comment