How to Share Data Between Containers Using Volumes

Sharing data between containers is a common requirement in Docker applications, especially when multiple containers need to access the same data. Docker volumes provide a convenient way to achieve this by allowing multiple containers to read from and write to the same volume. This guide will explain how to share data between containers using Docker volumes, along with examples and explanations.

1. Overview of Docker Volumes

A Docker volume is a persistent storage mechanism that is managed by Docker. Volumes can be shared among multiple containers, making them ideal for scenarios where data needs to be accessed by different services or applications running in separate containers.

2. Creating a Docker Volume

Before you can share data between containers, you need to create a Docker volume. You can do this using the docker volume create command:

docker volume create shared-volume

In this command:

  • shared-volume: This is the name of the volume you are creating.

3. Running Containers with the Shared Volume

Once you have created the volume, you can run multiple containers that use this volume. Here’s how to do it:

Step 1: Run the First Container

For example, let’s run a simple Nginx container that will serve files from the shared volume:

docker run -d --name web-server -v shared-volume:/usr/share/nginx/html nginx

In this command:

  • -v shared-volume:/usr/share/nginx/html: This mounts the volume shared-volume to the directory /usr/share/nginx/html inside the Nginx container, allowing it to serve files from the volume.

Step 2: Run the Second Container

Next, let’s run an Alpine container that will write data to the shared volume:

docker run -d --name file-writer -v shared-volume:/data alpine sh -c "while true; do echo 'Hello from Alpine!' >> /data/message.txt; sleep 5; done"

In this command:

  • -v shared-volume:/data: This mounts the same volume to the directory /data inside the Alpine container.
  • The command inside the Alpine container appends the text "Hello from Alpine!" to a file named message.txt every 5 seconds.

4. Accessing Shared Data from the First Container

Now that both containers are running, the Nginx container can serve the data written by the Alpine container. To verify this, you can access the Nginx server from your web browser or using curl:

curl http://localhost

This command should return the contents of message.txt if the Nginx server is configured to serve it. You may need to configure Nginx to serve the correct file or directory.

5. Stopping and Removing Containers

When you are done testing, you can stop and remove the containers:

docker stop web-server file-writer
docker rm web-server file-writer

6. Removing the Shared Volume

If you no longer need the shared volume, you can remove it using the following command:

docker volume rm shared-volume

Make sure that no containers are using the volume before attempting to remove it.

7. Conclusion

Sharing data between containers using Docker volumes is a straightforward process that allows for efficient data management in containerized applications. By creating a shared volume and mounting it in multiple containers, you can easily enable data sharing and collaboration between different services. Understanding how to use volumes effectively is essential for building scalable and maintainable Docker applications.