How To Run Multiple Containers With Docker Compose

How To Run Multiple Containers With Docker Compose

Docker Compose is a tool, which can be used run multiple Docker containers to run the applications. Docker compose can be stated with a YAML file called “docker-compose.yaml” and, with a single command, you have the luxury to manage all these multiple containers. Also, you can define the docker networks for your containers in the same file. Docker Compose is a great fit for an isolated environment with multiple containerized applications, which are running on a single host.

The good side of Docker Compose is it preserves the data, it has the ability to run a new container destroying the previous running one. In this process, it copies the data utilized by the previous container to the new one. Also, it recreates only the changed container, which allows us to maintain the great control of the running unchanged containers. The application with variables, can be defined with the environmental variables, which defined in the Docker compose file.

Read More: How To Create A VPC Peering In MongoDB Atlas Cloud And AWS

A Sample Docker Compose File

You can find a sample Docker Compose file here, with two containers connecting to the frontend and back end networks.

The famous method of defining the parameters as list in the yml file. Host and node ports also need to be defined under the service (ex: web). All other parameters such as environmental variables, volumes etc should also be defined as lists.


If you wish to use a $ sign in your environment variables in the docker-compose.yaml file, use “double dollar signs” ($$), I hope this will be really useful for some complex environmental variables.


In my example, two environmental variables defined under “web” service. A mounted EFS volume to an EC2 instance to the “/root/efs” mount point is connected as the “/data/” volume to the container.

I have defined two different isolated networks as “frontend” and “backend” in my file, “web” service is connected to the fronted and “mysql” service is connected to the backend, while “app” service is connected to the both networks. “app” service is the only service which can be talked to both the network.

Few Useful Docker Compose Commands

There are many docker commands which can be used with Docker Compose and, I thought to bring up few useful commands when running Docker Compose containers.

To start all the containers defined in the docker-compose.yaml file, use below command, this will start all the containers in the interactive mode.

docker-compose up 

If you need to start only a single container defined in the docker-compose file in the interactive mode, use the service name at the end (ex:web)

docker-compose up SERVICE_NAME

If you need to start all the containers in “detached” mode use -d flag

docker-compose up -d 

For a single container specify the name at the end

docker-compose up -d SERVICE_NAME

Assume that, you have done a change to a single service and, you need to recreate the container alone while others running use –no-deps flag

docker-compose up -d --no-deps SERVICE_NAME

To run an one-off command inside your container use below command, be low example is to view the environmental variables used in the web service container

docker-compose run SERVICE_NAME env

To stop docker containers use below command, specifying a single service would stop only the specified container

#To Stop All The Containers
docker-compose stop
#To Stop a Single Container
docker-compose stop web

These are only the very useful commands for your docker-compose environments.

To see how to install Docker Compose follow this well defined Docker documentation.

Click to rate this post!
[Total: 4 Average: 4.5]

2 responses

  1. Rebecca Acheampong Avatar
    Rebecca Acheampong

    fatal: [localhost]: FAILED! => {“changed”: false, “msg”: “Failed to download key at An unknown error occurred: ~/.netrc access too permissive: access permissions must restrict access to only the owner (/root/.netrc, line 3)”}

    I have this error when i followed your tutorial to install docker

    1. Aruna Lakmal Avatar

      Seems your netcore is too permissive.

      Can you try chmod og-rw /root/.netrc

Leave a Reply

Your email address will not be published. Required fields are marked *