Docker Compose is a powerful and popular tool used for managing and deploying applications based on Docker. It allows you to define, configure, and run multiple Docker containers as a single project, simplifying application deployment and ensuring consistency between development and production environments.
Below are some concepts and examples of Docker Compose:
Define the project using the docker-compose.yml file
In the docker-compose.yml
file, you can define the services required for your application. For example, to deploy a PHP web application with a MySQL database, you can define two services as follows:
version: "3"
services:
web:
image: php:7.4-apache
ports:
- "80:80"
volumes:
- ./app:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: my_database
In the above code snippet, we define two services: web
and db
. The web
service will use the PHP 7.4 image with Apache, listen on port 80, and mount the ./app
directory from the host into the /var/www/html
directory in the container. The db
service will use the MySQL 5.7 image and set some environment variables required for the database.
Using Docker Compose command
Once you have defined the project in the docker-compose.yml
file, you can use Docker Compose commands to manage the services.
-
Start the project:
docker-compose up
This command will start the containers for the services defined in the
docker-compose.yml
file. -
Stop and remove the containers:
docker-compose down
This command stops and removes all containers related to the project.
-
List running containers:
docker-compose ps
This command will display the status of the containers in the project.
-
View service logs:
docker-compose logs
This command shows the logs of the services in the project.
Environment variables and customization
Docker Compose allows you to use environment variables to customize configurations for different environments, such as development and production. You can use environment variables in the docker-compose.yml
file and define their values in corresponding .env
files.
For example, if you want to define an environment variable for the port of the web
service, you can add a line to the .env
file like this:
WEB_PORT=8080
Then, in the docker-compose.yml
file, you can use this environment variable like this:
version: "3"
services:
web:
image: php:7.4-apache
ports:
- "${WEB_PORT}:80"
volumes:
- ./app:/var/www/html
When running the docker-compose up
command, the web
service will listen on port 8080 instead of port 80.
Integrating with Docker Swam
If you want to deploy your application on a distributed environment with multiple nodes, Docker Compose can integrate with Docker Swarm. This allows you to manage services across multiple nodes in a Docker cluster.
To use this integration, you just need to add the --orchestrate
or --with-registry-auth
options when running docker stack deploy
or docker-compose up
commands in a Swarm environment.
Docker Compose is a useful tool for easy and efficient application development, testing, and deployment. It minimizes the differences between development and production environments, ensures consistency in the software development process, and enhances the productivity of development teams.