Docker Volumes & Bind Mounts

Docker Volumes & Bind Mounts

Docker Volumes

In Docker, a volume is a mechanism for persisting data generated and used by containers. Volumes are stored on the host filesystem outside the container's file system, making them an ideal solution for managing persistent data in a containerized environment.

Creating and Configuring Docker Volumes

Step 1 : Create a Volume

docker volume create my-vol

Step 2 : Verify the Volume Creation

docker volume ls

Inspect the created volume

docker inspect my-vol

Step 3 : Access the Volume

Navigate to the volume's mount point on the host system:

cd /var/lib/docker/volumes/my-vol/_data

Step 4 : Run Containers Using the Volume

Launch a container with the volume mounted to port 5050:

 docker run -itd --mount source=my-vol,destination=/usr/local/apache2/htdocs -p "5050:80" httpd

Launch another container using the same volume but on port 6060:

docker run -itd --mount source=my-vol,destination=/usr/local/apache2/htdocs -p "6060:80" httpd

Step 5 : Verify Content Synchronization

Now i have launched 2 containers with different port

Read the index.html file in inside volume

Access the container on port 5050 and 6060. You'll see the same content because both containers share the same volume.

5050 port

6060 port

Update the index.html file in the volume.

The changes will reflect immediately in both containers at ports 5050 and 6060.

5050 port

6060 port

Docker Bind Mounts

Bind mounts allow you to link a directory or file from the host system to a container. Changes made to the bind-mounted file or directory are immediately reflected on both the host and the container.

Configuring Bind Mounts :

Step 1 : Prepare the Host Directory

Create a directory on your host that you want to mount into the container:

Step 2 : Run a Container with a Bind Mount

Launch a Docker container with the bind mount specified:

 docker run -itd -p "6060:80" -v "/root/docker-sync:/usr/local/apache2/htdocs" httpd

Step 3 : Verify the Container

Check running containers:

docker ps

Access the container’s terminal:

docker exec -it 13ad964d0800 /bin/bash

Navigate to the /usr/local/apache2/htdocs directory inside the container:

Initially, the directory may be empty.

Exit the container

Now, Check the container port number, it is showing default content

Create an index.html file in the /root/docker-sync directory on your host machine.

Step 4 : Check Content Synchronization

Refresh the container’s content by accessing it via the public IP and port 6060. The index.html file content should automatically update inside the container reflecting changes made on the host.

Conclusion

Docker Volumes: Docker volumes are ideal for persisting and sharing data across containers, ensuring data remains consistent and managed even when containers are recreated.

Docker Bind Mounts: Bind mounts enable real-time synchronization between host files and containers, making them perfect for development scenarios where immediate file updates are needed.