Published on

Managing Data in Docker: Bind Mounts and Volumes

Authors
  • avatar
    Name
    Hieu Cao
    Twitter

Introduction

In Docker, data management is crucial for ensuring persistence and flexibility. This guide covers the two main approaches to handling data in Docker: Bind Mounts and Volumes. You'll learn when to use each method and how to implement them effectively.


Why Data Management Matters in Docker

Docker containers are ephemeral by design. When a container is deleted, its data is lost unless it is stored outside the container. This is where Bind Mounts and Volumes come into play, enabling data persistence and sharing across containers.


Bind Mounts

What Are Bind Mounts?

Bind Mounts allow you to map a directory or file from your host system into a container. Changes in the mapped directory are reflected on both the host and the container.

Example: Using Bind Mounts

  1. Create a directory on your host:

    mkdir /path/to/data
    echo "Hello, Docker!" > /path/to/data/example.txt
    
  2. Run a container with a Bind Mount:

    docker run -it --name bind-mount-container \
      -v /path/to/data:/app/data \
      ubuntu
    
    • -v /path/to/data:/app/data: Maps the host directory to /app/data inside the container.
  3. Inside the container, verify the mounted data:

    ls /app/data
    cat /app/data/example.txt
    
  4. Any changes made to /path/to/data on the host will be visible inside the container, and vice versa.


Volumes

What Are Volumes?

Volumes are managed by Docker and provide a more flexible and container-agnostic way to store data. They are not tied to the host file system and offer better performance.

Example: Using Volumes

  1. Create and run a container with a Volume:

    docker run -it --name volume-container \
      -v my-volume:/app/data \
      ubuntu
    
    • -v my-volume:/app/data: Creates or uses an existing volume named my-volume and maps it to /app/data inside the container.
  2. Inside the container, add some data:

    echo "Volume data" > /app/data/volume.txt
    
  3. Stop the container and inspect the volume:

    docker volume inspect my-volume
    
  4. Use the volume in another container:

    docker run -it --rm -v my-volume:/app/data ubuntu
    ls /app/data
    

Key Differences Between Bind Mounts and Volumes

FeatureBind MountsVolumes
ManagementHost-managedDocker-managed
LocationHost-specific pathDocker-controlled storage path
Use CaseLocal developmentProduction environments
Backup & SharingManualSimplified with Docker tools

Common Commands for Volumes

List Volumes

docker volume ls

Lists all Docker volumes.

Remove a Volume

docker volume rm my-volume

Deletes a specified volume.

Prune Unused Volumes

docker volume prune

Removes all unused volumes.


Conclusion

Understanding how to use Bind Mounts and Volumes is essential for effective data management in Docker. Bind Mounts are suitable for local development, while Volumes offer robust, production-ready storage solutions. By mastering these techniques, you can ensure your containerized applications handle data efficiently and securely.