Day 19 : Docker for DevOps Engineers

Day 19 : Docker for DevOps Engineers

Understanding Docker Volume & Docker Network

ยท

6 min read

Till now you have learned how to create docker-compose.yml file and pushed it to the Repository. Let's move forward and dig more on other Docker concepts like Docker Volume and Docker Network.

Enhancing Containerization

Docker, a powerful tool for containerization, offers features like volumes and networks that enhance its capabilities. Let's delve into these concepts and understand how they contribute to efficient container management.

Docker Volumes

Volumes in Docker act as separate storage areas accessible by containers. They enable the storage of data, such as databases, outside the container. This ensures that the data remains intact even if the container is deleted. Additionally, volumes can be mounted from the same source to create multiple containers sharing the same data.

Key Points:

  • Volumes provide persistent storage for containerized applications.

  • Data stored in volumes persists even after the associated container is deleted.

  • Multiple containers can access and share data stored in the same volume.

  • Volumes facilitate efficient data management in Dockerized environments.

Docker Networks

Docker networks create virtual spaces where multiple containers can be connected. These networks enable communication between containers and the host machine on which Docker is installed. By connecting containers within a network, they can seamlessly interact with each other, facilitating efficient data exchange and collaboration.

Key Points:

  • Docker networks enable communication between containers and the host machine.

  • Containers within the same network can communicate with each other.

  • Networks facilitate the creation of isolated environments for containerized applications.

  • Docker networks streamline communication and collaboration between containers, enhancing overall application performance.

Integration and Benefits

By leveraging Docker volumes and networks, developers and DevOps teams can optimize containerization strategies and streamline application deployment processes. Volumes ensure data persistence and sharing, while networks enable seamless communication between containers. Together, these features enhance the efficiency, reliability, and scalability of Docker-based applications.

In Summary:

  • Docker volumes provide persistent storage for containers, ensuring data integrity and accessibility.

  • Docker networks enable seamless communication between containers and the host machine, fostering collaboration and efficiency.

  • Integrating volumes and networks enhances Docker container management and accelerates application deployment processes.

Task-1

  • Create a multi-container docker-compose file which will bring UP and bring DOWN containers in a single shot ( Example - Create application and database container )

Hints:

  • Use the docker-compose up command with the -d flag to start a multi-container application in detached mode.

  • Use the docker-compose scale command to increase or decrease the number of replicas for a specific service. You can also add replicas in deployment file for auto-scaling.

  • Use the docker-compose ps command to view the status of all containers, and docker-compose logs to view the logs of a specific service.

  • Use the docker-compose down command to stop and remove all containers, networks, and volumes associated with the application

Creating a Multi-Container Docker Compose File

In this task, we'll create a multi-container Docker Compose file that brings up and brings down containers in a single shot. We'll use an example of creating an application and a database container to demonstrate this process.

Step 1: Define Services in Docker Compose

We'll start by defining our services in a docker-compose.yml file. This file will specify the configuration for both the application and the database containers.

version: '3.8'

services:
  app:
    image: my-app-image
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgres://username:password@db:5432/mydatabase

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: username
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase

Step 2: Bring Up Containers

To bring up the containers defined in the Docker Compose file, use the following command:

docker-compose up -d

The -d flag runs the containers in detached mode, allowing them to run in the background.

Step 3: View Container Status

To view the status of all containers defined in the Docker Compose file, use the following command:

docker-compose ps

This command will display the status of each service, including whether they are running.

Step 4: View Container Logs

To view the logs of a specific service, use the following command:

docker-compose logs <service-name>

Replace <service-name> with the name of the service whose logs you want to view.

Step 5: Scale Containers

To scale the number of replicas for a specific service, you can use the docker-compose scale command. For example, to scale the app service to 3 replicas, use the following command:

docker-compose scale app=3

This command will create two additional replicas of the app service.

Step 6: Bring Down Containers

To stop and remove all containers, networks, and volumes associated with the application defined in the Docker Compose file, use the following command:

docker-compose down

This command will gracefully shut down all containers and clean up the resources created by the Docker Compose file.

Task-2

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

  • Create two or more containers that read and write data to the same volume using the docker run --mount command.

  • Verify that the data is the same in all containers by using the docker exec command to run commands inside each container.

  • Use the docker volume ls command to list all volumes and docker volume rm command to remove the volume when you're done.

Using Docker Volumes and Named Volumes

In this task, we'll explore how to use Docker volumes and named volumes to share files and directories between multiple containers. We'll create two or more containers that read and write data to the same volume using the docker run --mount command. Then, we'll verify that the data is the same in all containers and learn how to manage volumes effectively.

Step 1: Create a Named Volume

First, let's create a named volume using the docker volume create command:

docker volume create my_volume

Step 2: Create Containers with the Shared Volume

Next, we'll create two containers that share the same volume. We'll mount the volume using the --mount flag:

docker run -d --name container1 --mount source=my_volume,target=/data alpine
docker run -d --name container2 --mount source=my_volume,target=/data alpine

This command creates two containers (container1 and container2) based on the Alpine Linux image. Both containers mount the my_volume named volume to the /data directory.

Step 3: Verify Data Consistency

Now, let's verify that the data is consistent across all containers. We'll use the docker exec command to run commands inside each container and create a file in the shared volume:

docker exec container1 sh -c 'echo "Hello from container1" > /data/file.txt'
docker exec container2 cat /data/file.txt

You should see the output Hello from container1, indicating that the data is shared between the containers.

Step 4: Manage Volumes

To list all volumes, use the following command:

docker volume ls

To remove the named volume when you're done, use the following command:

docker volume rm my_volume

โœ‰Endcard:

๐ŸŽ‰ Thank you for joining me on this insightful journey into the world of DevOps!

โค If you found this blog helpful and informative, don't forget to give it a like!

๐Ÿ”„ Share this valuable knowledge with your friends and colleagues, so they can also benefit from understanding the power of DevOps!

๐Ÿ‘‰ Stay updated with my latest posts and never miss out on exciting content! Click that Follow button to join and stay in the loop!

Follow me on LinkedIn -->abdallah-qamar๐Ÿ‘”

Stay tuned for Day 20...๐Ÿ‘‹

ย