Docker Compose is a tool used for defining and managing multi-container Docker applications. With Docker Compose, you can configure and run applications consisting of multiple interconnected services (like web servers, databases, caches, etc.) using a single YAML file (docker-compose.yml
). This simplifies the process of orchestrating complex applications by allowing you to define and manage all services together, instead of managing each container individually.
<em># Download docker-compose dan store in /usr/local/bin/docker-compose</em>
curl -SL https://github.com/docker/compose/releases/download/v2.29.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
<em># act as executable file</em>
sudo chmod +x /usr/local/bin/docker-compose

Key Concepts in Docker Compose
- Service: A service represents a container configuration. Each service in Docker Compose is typically an individual container that is part of your application stack, such as a web server, a database, or a cache.
- Network: Docker Compose automatically creates a network for the services defined in the Compose file, allowing them to communicate with each other by their service names.
- Volume: Volumes in Docker Compose are used to persist data across container restarts, useful for storing data that should remain even if the containers are removed.
Benefits of Docker Compose
- Easier Configuration: You define the entire multi-container setup in one file, making it easy to share, version control, and replicate.
- Environment Management: Compose makes it easy to define different environments (e.g., production, staging, development) by using different
docker-compose.yml
files or using environment variables. - Simplified Deployment: You can start all services with a single command, which simplifies launching complex applications.
- Scalability: You can scale services up or down by adjusting the number of container instances.
Example docker-compose.yml
Here’s an example of a docker-compose.yml
file that sets up a simple web application with a web server (using Nginx) and a database (using MySQL):
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./web:/usr/share/nginx/html
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydb
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
volumes:
db-data:
How to Use Docker Compose
- Start Services: Run the following command in the same directory as your
docker-compose.yml
file:
docker-compose up
This will build and start all containers specified in the file.
- Run in Detached Mode: To run the services in the background, add the
-d
flag:
docker-compose up -d
- Stop Services:
docker-compose down
This stops and removes all containers, networks, and volumes created by up
.
- Scaling: You can scale services by specifying the
--scale
flag:
docker-compose up -d --scale web=3
Docker Compose is widely used in development and testing environments and is also commonly used in staging and production setups for smaller applications. It’s a powerful tool for building and managing multi-container applications efficiently.