Skip to content

Latest commit

 

History

History
97 lines (79 loc) · 4.21 KB

container-docker-compose.md

File metadata and controls

97 lines (79 loc) · 4.21 KB

Backend Challenge - Docker Compose

Introduction

The "Docker Compose" challenge is designed to help you learn how to create a docker-compose.yml file for managing multi-container applications. Docker Compose simplifies the process of defining and running multi-container Docker applications.

Objectives

  • Understand the basics of Docker Compose and how it works.
  • Learn how to create a docker-compose.yml file to manage multiple containers.
  • Define services, networks, and volumes using Docker Compose.
  • Run and manage your multi-container application using Docker Compose commands.

Instructions

  1. Objective: Write a docker-compose.yml file to define and manage a multi-container application.

  2. Environment Setup:

    • Ensure Docker and Docker Compose are installed on your machine.
    • Choose a sample multi-container application (e.g., a web application with a separate database).
  3. Implementation Details:

    • Create a docker-compose.yml file in the root directory of your project.

    • Define multiple services in the docker-compose.yml file. Each service should correspond to a container.

    • Example docker-compose.yml for a web application with a database:

      services:
        web:
          image: my-web-app:latest
          build:
            context: ./web
          ports:
            - "8080:8080"
          environment:
            - DATABASE_URL=mysql://db:3306/mydatabase
          depends_on:
            - db
          networks:
            - my-network
      
        db:
          image: mysql:5.7
          environment:
            MYSQL_ROOT_PASSWORD: example
            MYSQL_DATABASE: mydatabase
            MYSQL_USER: user
            MYSQL_PASSWORD: password
          volumes:
            - db-data:/var/lib/mysql
          networks:
            - my-network
      
      volumes:
        db-data:
      
      networks:
        my-network:
    • Explanation:

      • version: Specifies the version of the Docker Compose file format.
      • services: Defines the services (containers) for your application.
        • web: The service for your web application.
          • image: Specifies the Docker image to use.
          • build: Defines the build context for building the image.
          • ports: Maps the container’s port to the host’s port.
          • environment: Sets environment variables for the service.
          • depends_on: Specifies dependencies between services (ensures db starts before web).
          • networks: Connects the service to a network.
        • db: The service for your database.
          • image: Specifies the Docker image for MySQL.
          • environment: Sets environment variables for MySQL.
          • volumes: Defines a volume for persistent data storage.
          • networks: Connects the service to the same network as the web service.
      • volumes: Defines named volumes for persistent storage.
      • networks: Defines custom networks for service communication.
  4. Testing:

    • Use Docker Compose commands to manage your application:
      • Build and Start Containers: docker-compose up --build
      • Start Containers in Background: docker-compose up -d
      • Stop Containers: docker-compose down
    • Verify that all services are running and can communicate with each other.
    • Access the web application through the exposed ports and verify that it can connect to the database.

Possible Improvements

  • Scaling Services: Use Docker Compose to scale services (e.g., run multiple instances of the web service).
  • Environment-Specific Configurations: Create different Docker Compose files for different environments (e.g., development, production).
  • Health Checks: Add health checks to ensure that services are healthy before starting dependent services.
  • Custom Networks: Use multiple custom networks to isolate services and control communication between them.

Conclusion

By completing this challenge, you will gain practical experience in managing multi-container applications using Docker Compose. This skill is crucial for deploying and managing complex applications in a consistent and efficient manner. Explore additional improvements and challenges to further enhance your skills.

Happy coding!