Day 19 Task: Docker-Volume and Docker Network

Day 19 Task: Docker-Volume and Docker Network

Docker-Volume

Docker allows you to create something called volumes. Volumes are like separate storage areas that can be accessed by containers. They allow you to store data, like a database, outside the container, so it doesn't get deleted when the container is deleted. You can also mount from the same volume and create more containers having same data.

we can map Docker Volume in two way

Container <--> Container

Host <--> Container

A volume can be mounted to multiple containers and it lies even if all containers are down. It can be removed only manually by the user.

  1. Creating a Docker Volume

      $docker volume create [volume_name]
    
  2. Listing a Docker Volume

      $docker volume list
    
  3. Mounting a volume.

      docker run --mount source=[volume_name],destination=[path_in_container] [docker_image]
    
  4. Removing a Volume.

      $docker volume rm [volume_name]
    
  5. Deleting all volumes at once.

      $docker volume prune
    

Docker Network

Docker allows you to create virtual spaces called networks, where you can connect multiple containers (small packages that hold all the necessary files for a specific application to run) together. This way, the containers can communicate with each other and with the host machine (the computer on which the Docker is installed). When we run a container, it has its own storage space that is only accessible by that specific container. If we want to share that storage space with other containers, we can't do that

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

1-Docker volumes and named volumes are used to share files and directories between multiple containers in a Docker environment. Here's how you can use them:

  1. Docker Volumes: Docker volumes are used to store data in a container or share data between multiple containers. They are managed by Docker and stored in the host file system. Here's how you can use Docker volumes:

Creating a Docker volume:

docker volume create my_volume

Starting a container with a Docker volume:

docker run -d -v my_volume:/path/to/mount <container_image>

This creates a container and mounts the my_volume volume to the specified path within the container.

  1. Named Volumes: Named volumes are a type of Docker volume that can be given a user-friendly name and can be used to share data between containers or persist data across container restarts. Here's how you can use named volumes:

Creating a named volume:

docker volume create my_named_volume

Starting a container with a named volume:

docker run -d -v my_named_volume:/path/to/mount <container_image>

This creates a container and mounts the my_named_volume named volume to the specified path within the container.

Using Docker volumes and named volumes in docker-compose: You can also use Docker volumes and named volumes in a Docker Compose file to define multi-container applications. Here's an example:

version: "3"
services:
  web:
    image: nginx
    volumes:
      - my_named_volume:/path/to/mount

  db:
    image: mysql
    volumes:
      - my_named_volume:/path/to/mount

volumes:
  my_named_volume:

In this example, two services (web and db) are defined, and both use the my_named_volume named volume to share data between them.

Using Docker volumes and named volumes allows you to easily share files and directories between containers in a Docker environment. It provides a convenient way to persist data, share data, and collaborate between containers in a Dockerized application.

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

Sure! Here's an example of how you can create two or more containers that read and write data to the same Docker volume using the docker run --mount command:

Step 1: Create a Docker volume

docker volume create my_volume

Step 2: Start the first container with the volume

docker run -d --name container1 --mount source=my_volume,target=/data alpine tail -f /dev/null

This starts a container named container1 based on the alpine image, and mounts the my_volume volume to the /data directory within the container.

Step 3: Start the second container with the same volume

docker run -d --name container2 --mount source=my_volume,target=/data alpine tail -f /dev/null

This starts a container named container2 based on the alpine image, and also mounts the my_volume volume to the /data directory within the container.

Step 4: Interact with the containers and the shared volume You can now interact with the containers and the shared volume. For example, you can run commands inside the containers to read and write data to the shared volume:

To write data to the volume from container1:

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

To read data from the volume in container2:

docker exec -it container2 cat /data/file.txt

Both container1 and container2 will be able to read and write data to the same volume, allowing them to share data.

Note: The --mount option is used to mount the volume to the container, with the source parameter specifying the name of the volume and the target parameter specifying the path within the container where the volume should be mounted.

Using Docker volumes with --mount allows you to easily share data between multiple containers in a Docker environment, enabling data persistence and collaboration among containers in a multi-container application.

Thank you For Reading My Blog.....................