Containers play a crucial role in application deployment. Docker is one of the most widely used open-source container runtimes. Docker volumes are popular and practical solutions for ensuring data persistence when working with containers. They are a better option than bind mounts, which depend on the directory structure and OS of the host computer because Docker entirely manages them. Volumes defeat building additional writable layers that increase the size of the Docker image. Using Docker Volume is suitable when working on a micro-service architecture using Docker containers in order to build and test various application components. In this guide, you will learn how to mount the host volume in a Docker container.
Willing to learn more about Docker? See related posts as follows: How to Set up a Private Docker Registry, Stop Docker from automatically starting on startup on MAC, Running Docker commands returns Docker is not recognized as an internal or external command, Running Docker commands returns Docker is not recognized as an internal or external command
What are Volumes?
Before proceeding to the demo section, understanding what Docker Volumes are is necessary.
In a short and simple sentence, Docker volumes are file systems mounted on Docker containers for the purpose of preserving data produced by the container while it is running.
A volume does not increase the size of the containers that use it, and the contents of a volume live outside the lifespan of a particular container, making them a frequently preferable option to persisting data in a container’s writable layer.
Working with Docker Volumes
During container launch, several possible approaches to mounting a Docker volume exist. The
--mount flags that are added to the
docker run the command is up to the user to decide.
Below are a few things to know about Docker Volumes:
- When the container disappears, the data is lost, and removing the data from the container can be challenging.
- Bind mounts are more difficult to transfer or backup than volumes.
- Volumes can be managed using the Docker API or the Docker CLI
- Both Linux and Windows containers support volumes.
- Shared volumes between numerous containers can be done more securely.
- Docker Volume is one of the concepts required in order to maintain Data persistence in the Docker container.
Getting Started with Docker Volume
To get started with mounting a Docker Volume, one of the criteria is to have Docker installed on your system. To learn how to install and set up Docker on your Ubuntu Machine, refer to this post on How to install Docker Engine on Ubuntu. After setting up Docker on your machine, run the
docker --version command verify that installation.
Now that you have set up Docker on your machine, run the
docker volume ls command to check the existing volumes.
Creating a Volume
docker volume create command is a perfect command to run to create a Docker Volume. To do so, run:
sudo docker volume create <volume name>
Verify the newly created volume as shown in the screenshot below. Remember to specify a unique name for your Volume.
Inspecting Docker Volume
Now that we have created a Volume, it’s time to inspect the volume. To do so, run the command below:
docker inspect <volume-name>
Mounting Docker Volumes
Having created and inspected the Docker Volume, we will mount the volume to a Docker Container. With the help of the
-v flag, we’ll mount the my-volume Volume to the Docker Container we’ll create using an Ubuntu base image.
sudo docker run -it -v my-volume:/shared-volume --name ubuntu-container-001 ubuntu
Running the above command will create the ubuntu base image container and mount the volume. From the screenshot below, we create a file named
Test-file.txt and exited the container with the
Now, let’s create another Docker Container called
ubuntu-container-002 and mount the same Docker Volume called
my-volume inside the Container using the below command:
sudo docker run -it -v my-volume:/shared-volume --name ubuntu-container-002 ubuntu
If you change the directory to the share-volume directory and use the ls command to list the content you will see the same test-file.txt file that was created in the same <my-volume> Volume but mounted in ubuntu-container-001. This is because the my-volume Volume is shared between two containers that are
To summarize, we discussed how to create, inspect, and mount a Volume to multiple Docker Containers in this post. This is extremely useful when multiple Docker Containers require shared access to files and directories.