Convert Figma logo to code with AI

docker logocompose

Define and run multi-container applications with Docker

33,537
5,174
33,537
246

Top Related Projects

68,457

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

109,710

Production-Grade Container Scheduling and Management

23,209

Complete container management platform

42,146

Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.

62,307

Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain. Automate everything from code deployment to network configuration to cloud management, in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com.

26,764

The Kubernetes Package Manager

Quick Overview

Docker Compose is a tool for defining and running multi-container Docker applications. It allows you to use a YAML file to configure your application's services, networks, and volumes, and then create and start all the services from your configuration with a single command.

Pros

  • Simplifies the process of managing multi-container applications
  • Allows for easy version control of application configurations
  • Provides a consistent development environment across different machines
  • Facilitates the creation of isolated testing environments

Cons

  • Can be complex to set up for large, intricate applications
  • May introduce overhead in simple, single-container scenarios
  • Limited to Docker-based deployments
  • Requires learning an additional configuration syntax

Code Examples

  1. Basic Docker Compose file structure:
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example

This example defines two services: a web server using Nginx and a database using PostgreSQL.

  1. Using volumes for persistent data:
version: '3'
services:
  db:
    image: mysql:latest
    volumes:
      - ./mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

This configuration mounts a local directory to store MySQL data persistently.

  1. Defining dependencies between services:
version: '3'
services:
  web:
    build: .
    depends_on:
      - db
  db:
    image: postgres:latest

Here, the web service depends on the db service, ensuring the database starts before the web application.

Getting Started

  1. Install Docker and Docker Compose on your system.
  2. Create a file named docker-compose.yml in your project directory.
  3. Define your services in the YAML file (see examples above).
  4. Run the following command in the directory containing your docker-compose.yml:
docker-compose up

This command will build (if necessary) and start your defined services. Use docker-compose down to stop and remove the containers.

Competitor Comparisons

68,457

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

Pros of Moby

  • More comprehensive platform for containerization, offering a wider range of features and capabilities
  • Better suited for large-scale, enterprise-level container deployments
  • Provides lower-level access to container runtime and networking components

Cons of Moby

  • Steeper learning curve due to its more complex architecture
  • May be overkill for simpler containerization needs or smaller projects
  • Less user-friendly for beginners compared to Compose's declarative approach

Code Comparison

Moby (Docker Engine) CLI:

docker run -d --name my-app -p 8080:80 my-image
docker network create my-network
docker volume create my-data

Compose YAML:

services:
  my-app:
    image: my-image
    ports:
      - "8080:80"
networks:
  my-network:
volumes:
  my-data:

Summary

Moby (formerly Docker Engine) is a more comprehensive containerization platform, offering greater flexibility and control for advanced users and enterprise deployments. Compose, on the other hand, provides a simpler, declarative approach to defining and running multi-container applications, making it more accessible for beginners and smaller projects. While Moby offers more extensive features, Compose excels in ease of use and quick setup for common containerization scenarios.

109,710

Production-Grade Container Scheduling and Management

Pros of Kubernetes

  • Highly scalable and suitable for large, complex applications
  • Advanced orchestration features like auto-scaling and rolling updates
  • Robust ecosystem with extensive tooling and community support

Cons of Kubernetes

  • Steeper learning curve and more complex setup
  • Overkill for simple applications or small-scale deployments
  • Requires more resources to run and maintain

Code Comparison

Kubernetes manifest (deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest

Docker Compose (docker-compose.yml):

version: '3'
services:
  myapp:
    image: myapp:latest
    deploy:
      replicas: 3

Kubernetes offers more granular control and advanced features, while Docker Compose provides a simpler configuration for basic multi-container applications. Kubernetes is better suited for complex, large-scale deployments, whereas Docker Compose is ideal for local development and smaller projects.

23,209

Complete container management platform

Pros of Rancher

  • Provides a comprehensive container management platform with a user-friendly GUI
  • Offers multi-cluster management and supports multiple Kubernetes distributions
  • Includes built-in security features and role-based access control (RBAC)

Cons of Rancher

  • More complex setup and learning curve compared to Compose
  • Requires additional resources to run the Rancher management server
  • May be overkill for simple, single-host deployments

Code Comparison

Rancher (using Helm):

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org

Compose:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Rancher is designed for managing complex, multi-cluster Kubernetes environments, while Compose focuses on defining and running multi-container Docker applications on a single host. Rancher offers more advanced features for large-scale deployments, but Compose provides a simpler solution for smaller projects or development environments.

42,146

Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.

Pros of Terraform

  • Supports a wide range of cloud providers and services, not limited to container orchestration
  • Offers more advanced state management and collaboration features
  • Provides a declarative approach to infrastructure as code across multiple platforms

Cons of Terraform

  • Steeper learning curve compared to Compose's simpler YAML-based configuration
  • Requires more setup and configuration for local development environments
  • May be overkill for simple, container-only projects

Code Comparison

Terraform:

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

Compose:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Terraform uses HCL (HashiCorp Configuration Language) to define infrastructure resources, while Compose uses YAML to define container services and their configurations. Terraform's syntax is more verbose but offers greater flexibility for complex infrastructure setups, whereas Compose's YAML is simpler and focused on container orchestration.

Both tools serve different purposes: Terraform is designed for managing infrastructure across multiple cloud providers, while Compose is specifically for defining and running multi-container Docker applications. The choice between them depends on the project's scope and requirements.

62,307

Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain. Automate everything from code deployment to network configuration to cloud management, in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com.

Pros of Ansible

  • Broader scope for configuration management and automation across multiple servers
  • Agentless architecture, requiring only SSH access to managed nodes
  • Extensive module library for various tasks and integrations

Cons of Ansible

  • Steeper learning curve, especially for complex playbooks
  • Slower execution compared to Docker Compose for local development
  • Requires more setup and configuration for simple containerized applications

Code Comparison

Ansible playbook example:

- hosts: webservers
  tasks:
    - name: Ensure nginx is installed
      apt:
        name: nginx
        state: present
    - name: Start nginx service
      service:
        name: nginx
        state: started

Docker Compose example:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Summary

Ansible excels in managing complex infrastructure and multi-server deployments, while Docker Compose is more focused on defining and running multi-container Docker applications. Ansible offers more flexibility and broader automation capabilities, but requires more setup and expertise. Docker Compose is simpler to use for containerized applications but has a narrower scope. The choice between them depends on the specific requirements of your project and infrastructure.

26,764

The Kubernetes Package Manager

Pros of Helm

  • Designed specifically for Kubernetes, offering native support for K8s resources
  • Provides templating and versioning for complex application deployments
  • Supports rollbacks and release management

Cons of Helm

  • Steeper learning curve, especially for those not familiar with Kubernetes
  • Requires a Kubernetes cluster to function, limiting its use in non-K8s environments
  • More complex setup and configuration compared to Docker Compose

Code Comparison

Helm Chart (values.yaml):

replicaCount: 3
image:
  repository: nginx
  tag: latest
service:
  type: ClusterIP
  port: 80

Docker Compose (docker-compose.yml):

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Helm focuses on Kubernetes-specific deployments with more advanced features, while Docker Compose is simpler and works with standalone Docker environments. Helm is better suited for complex, scalable applications in Kubernetes clusters, whereas Docker Compose excels in local development and simpler deployments.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Table of Contents

Docker Compose v2

GitHub release PkgGoDev Build Status Go Report Card Codecov OpenSSF Scorecard Docker Compose

Docker Compose is a tool for running multi-container applications on Docker defined using the Compose file format. A Compose file is used to define how one or more containers that make up your application are configured. Once you have a Compose file, you can create and start your application with a single command: docker compose up.

Where to get Docker Compose

Windows and macOS

Docker Compose is included in Docker Desktop for Windows and macOS.

Linux

You can download Docker Compose binaries from the release page on this repository.

Rename the relevant binary for your OS to docker-compose and copy it to $HOME/.docker/cli-plugins

Or copy it into one of these folders to install it system-wide:

  • /usr/local/lib/docker/cli-plugins OR /usr/local/libexec/docker/cli-plugins
  • /usr/lib/docker/cli-plugins OR /usr/libexec/docker/cli-plugins

(might require making the downloaded file executable with chmod +x)

Quick Start

Using Docker Compose is a three-step process:

  1. Define your app's environment with a Dockerfile so it can be reproduced anywhere.
  2. Define the services that make up your app in compose.yaml so they can be run together in an isolated environment.
  3. Lastly, run docker compose up and Compose will start and run your entire app.

A Compose file looks like this:

services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
  redis:
    image: redis

Contributing

Want to help develop Docker Compose? Check out our contributing documentation.

If you find an issue, please report it on the issue tracker.

Legacy

The Python version of Compose is available under the v1 branch.