๐ŸณDay 19 - Exploring Docker Volume & Docker Network

ยท

3 min read

๐ŸณDay 19 - Exploring Docker Volume & Docker Network

Welcome to another exciting journey into the world of Docker! In this article, we'll delve into two essential concepts: Docker Volumes and Networks. These features are crucial for managing data persistence and communication between containers efficiently. We'll explore these concepts in depth and demonstrate their usage through practical examples.

Docker Volumes are a mechanism for persisting data generated by and used by Docker containers. They allow data to survive container shutdowns and restarts, making them essential for applications that require persistent storage. Docker Volumes can be managed and shared among containers, providing a convenient way to handle data storage.

Docker Networks enable communication between Docker containers running on the same host or across different hosts. They facilitate seamless connectivity and interaction between containers, allowing them to communicate with each other as if they were part of the same network. Docker Networks come in different types, such as bridge, overlay, and host, each serving specific use cases.

Let's start by creating a docker-compose file that orchestrates multiple containers and brings them up or down in a single shot. Here's a sample docker-compose.yml:

version: '3.8'

services:
  web:
    image: python:3.9-slim
    volumes:
      - ./app:/app
    working_dir: /app
    command: ["python", "app.py"]
    ports:
      - "5000:5000"
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    ports:
      - "5432:5432"

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 defined in the docker-compose.yml file.

To demonstrate using Docker Volumes and Named Volumes to share files between multiple containers, we'll create two containers that read and write data to the same volume.

Create a Docker Volume:

docker volume create myvolume

Create a file inside the volume:

echo "Hello, Docker Volumes!" | docker run -i --mount source=myvolume,target=/data alpine sh -c 'cat > /data/file.txt'

Verify that the file exists in the volume:

docker run --rm --mount source=myvolume,target=/data alpine ls /data

Create a second container and verify that it can read the file:

docker run --rm --mount source=myvolume,target=/data alpine cat /data/file.txt

You can use the docker exec command to run commands inside each container and verify that the data is the same in both containers. For example:

docker exec <container_id> cat /data/file.txt #Remember to replace <container_id> with the actual ID or name of the container.

Docker Volumes and Networks are powerful features that enhance the capabilities of Docker containers, enabling efficient data persistence and communication. By mastering these concepts and incorporating them into your Docker workflows, you can build robust and scalable containerized applications. Experiment with the examples provided in this article to deepen your understanding and leverage the full potential of Docker in your projects.

Happy Dockering! ๐Ÿณโœจ