🚢Day 19 - Exploring Docker Volume & Docker Network

👋 Hello there! I'm Vivek, a DevOps enthusiast with a keen interest in streamlining software delivery. I hold a Master's degree in Computer Applications and have a solid foundation in key technologies such as Linux, Git, Docker, Kubernetes, and AWS.
💻 My passion lies in automation, ensuring efficient and seamless processes throughout the software development lifecycle. I thrive on creating robust CI/CD pipelines that empower teams to deliver high-quality software with confidence.
🚀 Beyond the code, I enjoy the ever-evolving world of DevOps and the challenges it brings. Join me on this journey as I explore new ways to enhance software delivery and foster a culture of continuous improvement.
Let's connect, collaborate, and make the world of DevOps even more exciting together
Docker-Volume
Docker allows you to create something called volumes. Volumes are stored outside the container's filesystem, which allows them to persist even if the container is stopped or deleted. You can also mount from the same volume and create more containers having same data.
You can create a volume using the docker volume create command:
docker volume create vol
Docker Network
A docker network is like a virtual bridge that allows Docker containers to communicate with each other and with the outside world. It provides a way for containers to Communicate to each other, even if they are running on different machines or hosts there are total 7 network type through which we can communicate.
Task-1: Create a multi-container docker-compose file which will bring UP and bring DOWN containers in a single shot
It's simple example of a multi-container Docker Compose file that includes an application and a database container. This example uses Two-tier flask Application with MYSQL database.
version: '3'
services:
web:
image: python:3.9-slim
volumes:
- mysql-data: /var/lib/mysql
- .message.sql: /docker-entrypoint-initdb.d/message.sql
working_dir: /app
command: ["python", "app.py"]
ports:
- "5000:5000"
depends_on:
- mysql
mysql:
image: MYSQL:5.7
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: test@123
ports:
- "3306:3306"
To bring up the containers, run:
docker-compose up -d
To bring down the containers, run:
docker-compose down
This will stop and remove all containers, networks, and volumes associated with the application.
Task-2: Learn how to use Docker Volumes and Named Volumes to share files and directories between multiple containers.
First we'll create two containers that read and write data to the same volume.
docker volume create shared_data
Create two or more containers that read and write data to the same volume using the
docker run --mountcommand.Container 1:
docker run -d --name container1 --mount source=shared_data,target=/data busybox sh -c "echo 'Data from Container 1' > /data/file.txt && tail -f /dev/null"This command runs the first container named
container1, mounting theshared_datavolume to the/datadirectory inside the container. It writes data to a file namedfile.txtwithin the volume.Container 2:
docker run -d --name container2 --mount source=shared_data,target=/data busybox sh -c "echo 'Data from Container 2' > /data/file2.txt && tail -f /dev/null"Similarly, this command runs the second container named
container2, also mounting theshared_datavolume to the/datadirectory inside the container. It writes different data to another file namedfile2.txtwithin the same volume.
Now you have two containers (container1 and container2) both reading and writing data to the same volume (shared_data). Any changes made by one container will be visible to the other container, as they are sharing the same volume.
- Verify that the data is the same in all containers by using the docker exec command to run commands inside each container
To verify that the data is the same in all containers, you can use the docker exec command to run commands inside each container and check the content of the shared volume. Here's how you can do it:
1. Verify Data in Container 1:
docker exec container1 cat /data/file.txt
This command will output the content of file.txt in container1
2. Verify Data in Container 2:
docker exec container2 cat /data/file.txtSimilarly, this command will output the content of
file.txtincontainer2.Use the docker volume ls command to list all volumes and docker volume rm command to remove the volume when you're done.
docker volume lscommand to list all volumes and then thedocker volume rmcommand to remove the specific volume. Here's how:List all volumes
docker volume lsThis command will list all Docker volumes present on your system, including the
shared_datavolume we created earlier.
Remove the volume:
docker volume rm shared_data
This command will remove the shared_data volume. Make sure you are not actively using this volume in any running containers, as removing the volume will delete all data stored within it.
Conclusion
In above task, we have learned to use Docker Volumes and Named Volumes to share files and directories between multiple containers. We created a Docker volume named shared_data, wrote data to a file inside the volume from one container, and then read the same file from another container. This demonstrates how Docker Volumes can be used to share data between containers, allowing them to access and modify the same files.
😊Happy Learning : )




