Docker Compose Cheatsheet

Docker Cheat Sheet

Docker Compose is a powerful tool that allows developers to define and run multi-container Docker applications. With Docker Compose, you can define your application’s services, networks, and volumes in a single YAML file, making it easy to manage complex containerized applications.

Why Docker Compose is Essential for Container Management

In today’s fast-paced development environment, containers have become a popular choice for deploying applications due to their portability and scalability. Docker Compose simplifies the process of managing containers by providing a declarative way to define and manage Docker services, networks, and volumes. Here are some reasons why Docker Compose is essential for container management:

  1. Simplified Deployment: Docker Compose allows you to define your application’s configuration in a single YAML file, making it easy to deploy your entire application stack with a single command. This helps streamline the deployment process and reduces the risk of configuration errors.
  2. Reproducible Builds: With Docker Compose, you can define the exact configuration of your containers, including the version of software, libraries, and dependencies, ensuring that your builds are reproducible and consistent across different environments.
  3. Scalability: Docker Compose makes it easy to scale your containers horizontally or vertically, allowing you to adapt your application to changing traffic patterns and resource requirements.
  4. Flexibility: Docker Compose provides a flexible and extensible framework for defining and managing containerized applications, allowing you to easily add, remove, or update services, networks, and volumes as needed.
  5. Portability: Docker Compose allows you to define your application’s configuration in a single YAML file, making it easy to share and reproduce your application stack across different environments, such as development, staging, and production.

Docker Compose Cheatsheet – Your Ultimate Guide

Now that we understand the importance of Docker Compose for container management, let’s dive into our comprehensive Docker Compose cheatsheet that will help you effectively manage containers and boost your website’s search rankings.

Docker Compose Installation and Setup

To get started with Docker Compose, you’ll need to install Docker on your system. Docker Compose is included with Docker Desktop for Windows and macOS, and it can be installed separately on Linux. Once Docker is installed, you can install Docker Compose using the following commands:

# For Linux
sudo apt-get update
sudo apt-get install docker-compose

# For macOS
brew install docker-compose

# For Windows
Download Docker Desktop from https://www.docker.com/products/docker-desktop

After installing Docker Compose, you can verify the installation by running the following command:

docker-compose --version

Docker Compose Configuration File

Docker Compose uses a configuration file in YAML format to define your application’s services, networks, and volumes. The configuration file is typically named docker-compose.yml and is placed in the root directory of your project. Here’s an example of a Docker Compose configuration file:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=mysecretpassword

Basic example

services:
 web:
 build: .
 # build from Dockerfile
 context: ./Path
 dockerfile: Dockerfile
 ports:
 - "5000:5000"
 volumes:
 - .:/code
 redis:
 image: redis

Commands

docker compose start
docker compose stop
docker compose pause
docker compose unpause
docker compose ps
docker compose up
docker compose down

Building

web:
# build from Dockerfile
 build: .
# build from custom Dockerfile
 build:
 context: ./dir
 dockerfile: Dockerfile.dev
# build from image
 image: ubuntu
 image: ubuntu:14.04
 image: tutum/influxdb
 image: example-registry:4000/postgresql
 image: a4bc65fd

Ports

ports:
 - "3000"
 - "8000:80" # guest:host
# expose ports to linked services (not to host)
 expose: ["3000"]
 
## Commands
 command to execute
 command: bundle exec thin -p 3000
 command: [bundle, exec, thin, -p, 3000]
# override the entrypoint
 entrypoint: /app/start.sh
 entrypoint: [php, -d, vendor/bin/phpunit]

Environment variables

# environment vars
 environment:
 RACK_ENV: development
 environment:
 - RACK_ENV=development
# environment vars from file
 env_file: .env
 env_file: [.env, .development.env]

Dependencies

# makes the `db` service available as the hostname `database`
# (implies depends_on)
 links:
 - db:database
 - redis
# make sure `db` is alive before starting
 depends_on:
 - db

Other options

# make this service extend another
 extends:
 file: common.yml # optional
 service: webapp
 volumes:
 - /var/lib/mysql
 - ./_data:/var/lib/mysql

Advanced features

Labels

services:
 web:
 labels:
 com.example.description: "Accounting web app

DNS servers

services:
 web:
 dns: 8.8.8.8
 dns:
 - 8.8.8.8
 - 8.8.4.4

Devices

services:
 web:
 devices:
 - "/dev/ttyUSB0:/dev/ttyUSB0"
services:
 web:
 external_links:
 - redis_1
 - project_db_1:mysql

Hosts

services:
 web:
 extra_hosts:
 - "somehost:192.168.1.100"