Day 21 of 100 Days : Getting Started with Docker Compose – Simplifying Multi-Container Deployments

Munilakshmi G JMunilakshmi G J
4 min read

Welcome back! Today, we’re diving into Docker Compose—a powerful tool that streamlines the process of working with multi-container applications. Whether your application includes databases, caching systems, or multiple microservices, Docker Compose enables you to manage them all effortlessly with a single command. Let's go through the essentials step-by-step and explore a practical example along the way!


🚀 What is Docker Compose?

Docker Compose is a tool that helps you define and manage multiple Docker containers within a single YAML configuration file, called docker-compose.yml. This file acts as a blueprint, describing each service, its dependencies, and configurations. With a single command, you can start, stop, and manage all containers effortlessly. Here’s why it’s so useful:

  1. Simplified Workflow: Launch all required services in one go.

  2. Automatic Dependency Management: Compose takes care of starting services in the correct order based on dependencies.

  3. Environment Consistency: Easily share and reproduce environments, making it great for teamwork.


Real-World Scenario: A Simple Web Application

To demonstrate, let’s set up a basic web app with a Flask server (for our application logic) and Redis (for caching).

  • Flask Server: This will handle incoming requests.

  • Redis: This will act as a cache, tracking the number of page visits.


Step 1: Writing the Docker Compose File

Let’s create a docker-compose.yml file to define our services. Here’s how we’d structure it:

# docker-compose.yml
version: '3.8'

services:
  web:
    image: python:3.8
    working_dir: /app
    volumes:
      - .:/app
    command: python app.py
    ports:
      - "5000:5000"
    depends_on:
      - redis

  redis:
    image: "redis:alpine"

What’s Happening Here?

  • Two Services: We define two services – web (our Flask app) and redis.

  • Web Service: Uses the Python 3.8 image, mounts our current directory, and runs the Flask app on port 5000.

  • Redis Service: Uses a lightweight Redis image to handle caching.


Step 2: Writing a Simple Dockerfile for Flask (Optional)

If you want to build the Flask app using a Dockerfile, here’s an example:

# Dockerfile
FROM python:3.8
WORKDIR /app
COPY . /app
RUN pip install flask redis
CMD ["python", "app.py"]

Explanation:

  • This Dockerfile builds an image with Flask and Redis libraries installed.

  • Copies our app files into the container and sets the command to run app.py.


Step 3: Running the App with Docker Compose 🚀

With everything set up, you can run the app using Docker Compose:

docker-compose up

This command will:

  1. Pull necessary images (if not already available).

  2. Start the redis container first, then the web container.

  3. Automatically set up dependencies between services.

To stop the services, simply use:

docker-compose down

✨ Exploring Docker Compose Commands for Enhanced Control

Here are a few more handy commands:

  • docker-compose logs: View logs from all services in real time.

  • docker-compose restart: Quickly restart services.

  • docker-compose ps: Check the status of all containers in your setup.

  • docker-compose build: Rebuild images, useful when you change code or dependencies.

These commands add flexibility and control, allowing you to manage complex setups with ease.


Docker Compose vs. Kubernetes: A Quick Note

Docker Compose is ideal for local development and simpler applications, where you may need to launch multiple services quickly on a single machine. It's straightforward and easy to set up, making it a great choice for small projects, testing environments, or prototyping.

For large-scale production deployments, however, Kubernetes (K8s) is usually the go-to. Kubernetes is designed for complex, distributed applications, providing advanced features such as automatic scaling, load balancing, and self-healing of applications. It excels at managing resources across clusters of machines and is highly customizable, allowing you to handle microservices architectures with ease.

While Docker Compose is lightweight and great for getting started, Kubernetes offers greater control, resilience, and flexibility for applications that need to scale dynamically or span across multiple servers.


🎉 Conclusion

Docker Compose is a game-changer for simplifying multi-container application management. With a single docker-compose up command, you can start an entire stack, streamline dependencies, and efficiently manage containerized applications. While Docker Compose is best suited for development and staging, Kubernetes might be the better choice as you scale into production environments.

Give it a try, and see how much easier it makes working with multi-container apps!

0
Subscribe to my newsletter

Read articles from Munilakshmi G J directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Munilakshmi G J
Munilakshmi G J

"Aspiring DevOps Engineer on a 100-day journey to master the principles, tools, and practices of DevOps. Sharing daily insights, practical lessons, and hands-on projects to document my path from beginner to proficient. Passionate about continuous learning, automation, and bridging the gap between development and operations. Join me as I explore the world of DevOps, one day at a time!"