Docker for DevOps Engineers: Exploring Volumes and Networks #Day-19

Nikunj VaishnavNikunj Vaishnav
3 min read

Docker Volume

Docker Volumes are like separate storage areas that can be accessed by containers. They provide a way to persist data beyond the lifecycle of a container, ensuring that your data remains intact even if the container is removed. Here are some key points about Docker Volumes:

  • Data Persistence: Volumes allow you to store data outside the container, so it doesn't get deleted when the container is removed.

  • Shared Storage: You can mount the same volume to multiple containers, enabling them to share data seamlessly.

  • Ease of Use: Volumes are managed by Docker, making it easy to create, mount, and remove them as needed.

For more details, check out the official Docker documentation on volumes.

Docker Network

Docker Networks enable you to create virtual networks, connecting multiple containers together. This setup allows containers to communicate with each other and with the host machine. Here are some key points about Docker Networks:

  • Container Communication: Networks allow containers to communicate with each other using container names as hostnames.

  • Isolation: Each container has its own storage space, but networks provide a way to connect containers that need to interact.

  • Flexibility: You can create different types of networks (bridge, overlay, etc.) to suit your application's requirements.

For more details, check out the official Docker documentation on networking.

Task 1: Create a Multi-Container Docker Compose File

Let's create a multi-container docker-compose.yml file that will bring up and bring down containers in a single shot. We'll create an application and a database container.

Steps:

  1. Create thedocker-compose.yml file:

     yamlCopy codeversion: '3'
     services:
       app:
         image: myapp:latest
         ports:
           - "8080:8080"
         networks:
           - app-network
         volumes:
           - app-data:/var/lib/app-data
       db:
         image: mysql:5.7
         environment:
           MYSQL_ROOT_PASSWORD: rootpassword
           MYSQL_DATABASE: mydatabase
         networks:
           - app-network
         volumes:
           - db-data:/var/lib/mysql
     networks:
       app-network:
     volumes:
       app-data:
       db-data:
    
  2. Start the multi-container application in detached mode:

     codedocker-compose up -d
    
  3. Scale the application service to increase the number of replicas:

     codedocker-compose scale app=3
    
  4. View the status of all containers:

     codedocker-compose ps
    
  5. View the logs of a specific service:

     codedocker-compose logs app
    
  6. Stop and remove all containers, networks, and volumes associated with the application:

     codedocker-compose down
    

Task 2: Using Docker Volumes and Named Volumes

Learn how to use Docker Volumes to share files and directories between multiple containers.

Steps:

  1. Create two or more containers that read and write data to the same volume:

     codedocker run -d --name container1 --mount source=myvolume,target=/app busybox
     docker run -d --name container2 --mount source=myvolume,target=/app busybox
    
  2. Verify that the data is the same in all containers:

     codedocker exec container1 sh -c 'echo "Hello from container1" > /app/data.txt'
     docker exec container2 cat /app/data.txt
    
  3. List all volumes:

     codedocker volume ls
    
  4. Remove the volume when you're done:

     codedocker volume rm myvolume
    

By following these tasks, you'll gain a deeper understanding of how to use Docker Volumes and Docker Networks to enhance your containerized applications.

Conclusion

By following the tasks outlined in this article, you'll gain a deeper understanding of how to effectively use Docker Volumes and Docker Networks to enhance your containerized applications. These tools are essential for ensuring data persistence, enabling seamless communication between containers, and providing the flexibility needed to meet your application's requirements.

Happy Dockering!

Connect and Follow:

LinkedIn|Twitter|GitHub

Like👍 | Share📲 | Comment💭

0
Subscribe to my newsletter

Read articles from Nikunj Vaishnav directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nikunj Vaishnav
Nikunj Vaishnav

👋 Hi there! I'm Nikunj Vaishnav, a passionate QA engineer Cloud, and DevOps. I thrive on exploring new technologies and sharing my journey through code. From designing cloud infrastructures to ensuring software quality, I'm deeply involved in CI/CD pipelines, automated testing, and containerization with Docker. I'm always eager to grow in the ever-evolving fields of Software Testing, Cloud and DevOps. My goal is to simplify complex concepts, offer practical tips on automation and testing, and inspire others in the tech community. Let's connect, learn, and build high-quality software together! 📝 Check out my blog for tutorials and insights on cloud infrastructure, QA best practices, and DevOps. Feel free to reach out – I’m always open to discussions, collaborations, and feedback!