Computer scienceSystem administration and DevOpsDockerDocker Compose

Running a docker-compose with several services

5 minutes read

Docker Compose is a tool for defining and running multi-container Docker applications. Let's dive into the practical aspect of running Docker Compose with several services. This is where Docker Compose truly shines, as it simplifies the process of managing complex applications composed of multiple interconnected services.

Defining multiple services

Within Docker Compose, you craft the structural foundation of your application's ecosystem through the creation of a thoroughly defining docker-compose.yml file. This file serves as the orchestration script, describing the various services that compose your application, while concurrently prescribing the precise manner in which these services collaboratively engage and interact with each other. It acts as the architectural masterplan, governing how the containerized components harmoniously interconnect to form a seamlessly functioning whole. This configuration file is the cornerstone of Docker Compose, enabling the efficient coordination of complex multi-service applications.

Certainly, let's expand on this example to provide a more comprehensive understanding of the Docker Compose configuration. In the following elaboration of the docker-compose.yml file, we'll delve into the specifics of each service and the role it plays within the application.

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./web-content:/usr/share/nginx/html
    networks:
      - my_network
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - my_network

networks:
  my_network:

volumes:
  db-data:

In this extended configuration:

  • The web service utilizes the latest Nginx image and maps port 80 on the host to port 80 in the container for web traffic. Additionally, it demonstrates the use of volumes to link the local ./web-content directory to the container's web content directory, enabling dynamic content updates.

  • The db service, powered by the latest MySQL image, is enriched with environment variables. It specifies the root password as 'secret' and creates a database named mydb. Volumes are used to persist the MySQL data within the db-data volume, ensuring data durability and sharing.

Executing multiple services

To set your defined services into motion as per your docker-compose.yml configuration, you will need to access your terminal and navigate to the directory housing the file. Once there, initiate the following command:

docker-compose up

Docker Compose will then proceed to launch the services specified in your configuration and present their respective logs directly within the terminal. This live log output proves invaluable for troubleshooting and monitoring purposes, providing real-time insights into the operation of each service.

Running specific services

You can also choose to run only specific services from the Docker Compose manifest. For example, if you want to start only the Nginx service from your services, you can execute the following command:

docker-compose up nginx

Background execution

We can run the services inconspicuously in the background, you can employ the -d or --detach option with the docker-compose up command:

docker-compose up -d

By executing this command, your services will discreetly commence as background processes, allowing you to swiftly regain control of your terminal prompt. This background execution is particularly beneficial when you require services to operate without taking up your terminal's state.

Scaling your services

Docker Compose offers a distinct advantage by allowing you to easily scale your services. For instance, if you require multiple instances of the web service for efficient load balancing, you can achieve this by using the docker-compose up command and specifying the desired number of replicas:

docker-compose up -d --scale web=3

This command will initiate three separate instances of the web service, each listening on port 80, albeit with distinct container names. This functionality is a valuable asset when it comes to optimizing the performance and scalability of your containerized applications.

Monitoring running services

To gain insights into the status of your actively running services, you can make use of the docker-compose ps command:

docker-compose ps

This command offers a comprehensive snapshot of each service's current status, encompassing vital details such as container names, port configurations, and their health status. It serves as a valuable tool for keeping tabs on the operational health of your Docker Compose-managed services.

Halting services

For the purpose of stopping and dismantling the services defined within your docker-compose.yml configuration, you can invoke the docker-compose down command:

docker-compose down

Upon execution, this command will initiate the process of halting and subsequently removing all containers created and managed by Docker Compose. It serves as an efficient means to gracefully conclude the operation of your containerized services.

But if we want to stop and shut down one particular service, we can do so selectively. For instance, if we wish to stop only the Nginx service, we can use the following command:

docker-compose down nginx

This command will halt the Nginx service, allowing other services to continue running if specified in the manifest.

Conclusion

Docker Compose simplifies the management and execution of complex applications comprising multiple services. You define these services and their settings within a docker-compose.yml file, and from there, you wield straightforward commands to initiate, halt, scale containers, and oversee their operations. This streamlined approach accelerates the development and deployment of containerized applications, empowering you to concentrate on service development and testing, while carrying concerns about the underlying infrastructure to the background.

8 learners liked this piece of theory. 3 didn't like it. What about you?
Report a typo