Mastering Docker Volumes: A practical guide for Beginners

Brice Fotzo
4 min readJun 5, 2024

--

Docker volume from https://docs.docker.com/storage/volumes/

Imagine having docker containers running, and you want to update or restart it without losing the data you have inside. How would you manage that? This is a common challenge many faces when first diving into Docker. However, Docker volumes offer an elegant solution to this problem by ensuring your data persists beyond the lifecycle of a container.

In this article, we’ll explore what Docker volumes are, why they are indispensable, and how you can use them effectively to manage your data. Whether you’re new to Docker or looking to deepen your understanding, this guide will provide you with practical insights and examples.

Table of content

What makes Docker volumes essential?

Docker volumes are designed to persist data created by and used within Docker containers. Unlike a container’s writable layer, data in volumes exists outside the container lifecycle, ensuring it remains intact even if the container is deleted.

Why use Docker volumes?

  1. Data persistence: Volumes ensure your data is not lost when containers are removed. This persistence is critical for applications that need to retain state or logs across container restarts.
  2. Multi-Container sharing: Volumes can be shared among multiple containers, making them ideal for scenarios where data needs to be accessed by more than one container.
  3. Space efficiency: Since volumes exist outside the container’s writable layer, they do not inflate the size of your Docker images, leading to more efficient storage management.
  4. Lifecycle independence: Volumes have their own lifecycle, separate from the containers that use them, which adds flexibility in managing your data.

Creating and managing volumes

Creating a volume

To create a new volume, you use the docker volume create command:

docker volume create my_volume

This command creates a volume named my_volume.

Listing volumes

To see all available volumes, you can list them with:

docker volume ls

The result looks like this:

Inspect volumes

Let’s inspect our created volume named my_volume . The command to run is:

docker volume inspect my_volume

We have various information about the volume, especially the path where to find the volume data on the local machine.

Using volumes with containers

Running a container with a volume

When running a container, you can mount a volume to a specific directory within the container using the -v flag:

docker run -d --name my_container -v my_volume:/data nginx

This example runs a Nginx container and mounts my_volume to the /data directory inside the container.

You can check if the container created has the volume my_container with:

docker inspect -f "{{ .Mounts }}" my_container

Sharing volumes between containers

You can share volumes between containers, which is useful for applications requiring shared storage:

docker run -d --name my_container_2 --volumes-from my_container nginx

Here, a new nginx container my_container_2 is run, attaching the volumes from an existing container named my_container. Let’s check it with:

docker inspect -f "{{ .Mounts }}" my_container_2

Mounting many volumes in a container

You can mount many volumes to a single container like this:

docker run -d --name my_container_3 -v volume1:/data1 -v volume2:/data2 nginx

Let’s check:

We have in fact 2 volumes for the container my_container_3 .

Mounting a volume as Read-Only

For scenarios where you want to prevent modifications to the data, you can mount a volume with read-only access:

docker run -d -v my_volume:/data:ro nginx

This mounts my_volume in read-only mode at /data using the keyword ro. By default, the keyword rw for read-write is the one used.

Cleaning up volumes

Deleting a specific volume

To remove a volume, you use:

docker volume rm my_volume

Running a container with temporary volumes

In some cases, you might want to use volumes temporarily and delete them once the container stops:

docker run --rm -v temp_volume1:/data1 -v temp_volume2:/data2 nginx

The --rm flag ensures that temp_volume1 and temp_volume2 are removed after the container exits.

Pruning unused volumes

To clean up all unused volumes and free up space:

docker volume prune

This command removes all volumes that are not currently in use by any container.

Conclusion

Docker volumes are an essential feature for any Docker user, providing a robust solution for data persistence, sharing, and efficient storage management. By mastering the use of Docker volumes, you can ensure your data is safely managed and accessible, even as your containers come and go. With the practical examples and commands provided, you’re now equipped to leverage Docker volumes to their full potential in your projects.

Let’s connect to continue the discussion! 😉

--

--

Brice Fotzo
Brice Fotzo

No responses yet