How to Install and Use Docker Compose: A Beginners Guide

New to Docker Compose? This guide will help you get started with installation and usage basics for your multi-container applications.

Docker is a tool that revolutionizes the way we build and deploy applications. Docker Compose is an essential addition to it that expands its capabilities and makes it easier to work with.

However, getting started can be overwhelming if you’re new to Docker Compose. To facilitate this, in this article, we’ll cover the basics of Docker Compose and show you how to create a simple multi-container application.

By the end of this guide, you’ll understand how to install and use Docker Compose to build and deploy your own applications. But first, let’s answer an important question.

What’s Docker Compose?

Docker Compose is a platform-neutral tool for defining and running multi-container Docker applications. It allows you to define a group of services, their dependencies, and the configuration to run them declaratively using a YAML file.

Then, Docker Compose uses this file to create and start all the necessary containers with a single command. It is a powerful tool widely used for development, testing, and production environments for managing containerized applications.

Why Use Docker Compose?

Docker Compose simplifies managing multi-container applications by providing an easy way to orchestrate and manage their dependencies, network, and storage configuration.

Here are some of the main reasons why to use Docker Compose.

  1. Simplified Configuration: With Docker Compose, you can define all the services and their configuration in a single YAML file, which makes it easier to manage complex setups with multiple containers and dependencies.
  2. Seamless Communication: Docker Compose automatically creates a network between the containers in your application, allowing them to communicate seamlessly without any extra setup.
  3. Variables Support: Docker Compose supports variables in Compose’s YAML file. These variables can be used to customize your deployments to different environments and needs.
  4. Consistent Development and Testing Environments: With Docker Compose, you can define the same environment for your development and testing machines, which helps avoid compatibility issues and ensures that your application behaves consistently across different environments.

Having specified all that, let us show you how to install it.

How to Install Docker Compose

First, ensure you have Docker installed on your system before installing Docker Compose, as it must be present for Docker Compose to work. So, let’s check if Docker is available on our system:

docker -v
Docker's version check.
Docker’s version check.

As you can see from the command output above, Docker is installed on our machine. However, if you get an error message like “bash: docker: command not foundโ€ฆ“, you’ll need to install Docker before proceeding.

We’ve got you covered if you need help with how to do it. Here are our easy-to-follow guides for UbuntuDebianLinux Mint, Fedora, Raspberry PiAlmaLinux, and Rocky Linux. Now back on topic.

To start with Docker Compose, you’ll need to install it on your local machine first. Fortunately, the process is relatively straightforward and can be completed with just two commands.

The first one is to download Docker Compose, which is a single binary:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-composeCode language: JavaScript (javascript)

Then, set executable permissions on the file:

sudo chmod +x /usr/local/bin/docker-compose

That’s it. Let’s see whether we already have Docker Compose installed:

docker-compose version
Docker Compose's version check.
Docker Compose’s version check.

Everything seems fine – time to test our Docker Compose installation.

Creating a Docker-Compose File

To use Docker Compose, you must first create a “docker-compose.yaml” file describing the containers in your application’s stack. It describes the services, environment variables, volumes, and networks our containers will use.

It is important to remember that containers declared in the “docker-compose.yaml” file automatically become members on the same stack.

In other words, they’re linked in their own Docker network, which is automatically created by Docker Compose when they are started, so they can communicate using their service names as hostnames described in the “docker-compose.yaml” file.

For example, the Docker Compose YAML file below deploys two containers, MySQL and phpMyAdmin. As a result, you’ll have a running database and a convenient web-based UI to administer it in minutes.

version: '3.8'

# Services
services:

    # MySQL Service
    mysql:
        image: mysql:latest
        environment:
            MYSQL_ROOT_PASSWORD: your_password
        volumes:
            - mysqldata:/var/lib/mysql

    # phpMyAdmin Service
    phpmyadmin:
        image: phpmyadmin/phpmyadmin:latest
        ports:
            - 8080:80
        environment:
            PMA_HOST: mysql
        depends_on:
            - mysql

# Volumes
volumes:
  mysqldata:Code language: PHP (php)

Copy and save the above content to a file named “docker-compose.yaml.” Don’t forget to change the password for the “MYSQL_ROOT_PASSWORD” variable to another of your choices.

Then, from the directory where the file is placed, open the terminal and type:

docker-compose up -d
Starting a deployment with Docker Compose.
Starting a deployment with Docker Compose.

The command will begin to pull (download) the MySQL and phpMyAdmin Docker images from Docker Hub. This will take a while. Once the download is complete and the containers are successfully run, their status will change to “Started.”

Congratulations! Your first Docker Compose deployment was created successfully. Now, open your browser and navigate to “http://localhost:8080.” The phpMyAdmin login page will greet you.

phpMyAdmin login page.
phpMyAdmin login page.

Use the user “root” and the password you specified in the “docker-compose.yaml” file to log into phpMyAdmin and start administrating your dockerized MySQL container.

phpMyAdmin UI
phpMyAdmin UI

This simple example should give you an idea of how to use Docker Compose to deploy multi-container applications. Now, let’s review the essential Docker Compose commands for managing them.

Commonly Used Docker Compose Commands

If you’re familiar with Docker, using Docker Compose commands will seem very familiar, as they overlap and have similar functionality. So let’s take a look at the most important ones.

We stress that the docker-compose command must always be run from the directory containing the “docker-compose.yaml” file defining the corresponding containerized service(s).

Build & Run Containers

The docker-compose up command builds and runs the Docker images, starts the containers, and attaches to containers for a service. However, it is often used with an added “-d (--detach)” flag, indicating that a Docker container is running in the background of the terminal.

docker-compose up -d

If you omit to add it, the containers will remain stuck to your terminal session and will be terminated when you press “Ctrl+C,” for example.

Stop & Remove Containers

The command shown below will stop and remove containers and all the networks:

docker-compose down

In addition, if you add the “-v (--volumes)” flag to it, all volumes associated with the services defined in “docker-compose.yaml” will also be deleted. So use it with caution!

docker-compose down -v

List Docker Containers

To view the current status of the running containers in a Docker Compose application, execute the following command:

docker-compose ps

However, this will not show you the stopped containers. So, add the “-a (--all)” argument to the command to show the status of all service-defined ones in the “docker-compose.yaml” file.

docker-compose ps -a

Stop Containers

You can stop all the running containers defined in the “docker-compose.yaml” file without removing them by using the following command:

docker-compose stop

To stop only an individual container, add a reference after the command to the service name defined as such in the “docker-compose.yaml” file. For example:

docker-compose stop mysql

Start Containers

To start all existing containers that were previously created with the docker-compose up command:

docker-compose start

Add the service name after the command to run only a single one. For example:

docker-compose start mysql

View Logs

Sometimes, our Docker Compose deployments fail. One of the main ways to find out what went wrong in such a situation is by examining the containers’ logs.

To do so, enter the docker-compose logs command followed by the service name as you defined it in the “docker-compose.yaml” file. For example:

docker-compose logs mysql

A handy option is to add the “-f (--follow)” argument, allowing you to track what is happening in the corresponding container in real-time.

docker-compose logs -f mysql

Remove Container

To remove stopped service containers, type the following:

docker-compose rm

In addition, to remove any anonymous volumes attached to containers, use the “-v (--volume)” argument:

docker compose rm -v

Finally, we highly recommend checking out Compose’s CLI documentation for a detailed reference and in-depth coverage of all Docker Compose commands.

Conclusion

Docker Compose is an essential tool for any developer or system administrator looking to streamline their workflow and manage multiple containers.

With its easy-to-use syntax and powerful features, Docker Compose makes it possible to quickly set up complex multi-container environments and test your applications in various scenarios.

By following the steps outlined in this guide, you should now understand how to install and use Docker Compose to simplify your development process.

In addition, check out the projectโ€™s official documentation to learn more about Docker Compose.

We hope that we were helpful to you. Any comments or suggestions are welcome in the comments section below.

Bobby Borisov

Bobby Borisov

Bobby, an editor-in-chief at Linuxiac, is a Linux professional with over 20 years of experience. With a strong focus on Linux and open-source software, he has worked as a Senior Linux System Administrator, Software Developer, and DevOps Engineer for small and large multinational companies.

Think You're an Ubuntu Expert? Let's Find Out!

Put your knowledge to the test in our lightning-fast Ubuntu quiz!
Ten questions to challenge yourself to see if you're a Linux legend or just a penguin in the making.

1 / 10

Ubuntu is an ancient African word that means:

2 / 10

Who is the Ubuntu's founder?

3 / 10

What year was the first official Ubuntu release?

4 / 10

What does the Ubuntu logo symbolize?

5 / 10

What package format does Ubuntu use for installing software?

6 / 10

When are Ubuntu's LTS versions released?

7 / 10

What is Unity?

8 / 10

What are Ubuntu versions named after?

9 / 10

What's Ubuntu Core?

10 / 10

Which Ubuntu version is Snap introduced?

The average score is 68%