How to install Docker Compose on Ubuntu

Docker Compose is particularly well-suited for development and test environments but also for smaller production deployments. We explain how you can easily orchestrate Docker applications on Ubuntu with Compose.

What are the requirements for Docker Compose on Ubuntu?

Before you can use Docker Compose, you must ensure that your system meets the following prerequisites:

  • Docker Engine: Compose is an extension to the Docker Engine that you need to install.
  • Operating system: Ubuntu, sudo user with root privileges.
Tip

To use an operating system other than Linux, see our guide on how to install Docker Compose on Windows and Docker Compose on macOS.

Step-by-step guide to installing Docker Compose on Ubuntu

To use Docker Compose on Ubuntu, you must first install Docker Engine and verify that it’s running properly. Once Docker is running, download Compose and create the YAML file to configure your applications.

Step 1: Download and install Docker Compose

Download the latest version of Docker Compose from the official GitHub repository by entering the following command in a terminal:

$ curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
shell

Now, you can give Docker Compose execute rights:

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

Use the --version option to check if Compose was successfully installed.

$ docker-compose --version
shell

You’ll get the following output:

If you see the version number, Docker Compose has been successfully installed.

If installation fails, check the path.

You can also create a symbolic link to the /usr/bin path:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
shell

Step 2: Configure the docker-compose.yml file

To demonstrate the design of a Docker Compose YAML file, we use the Nginx image from the official Docker Hub for the container environment.

First, create a new folder in your home directory:

$ mkdir ~/compose-test
shell

Swap to the directory and create a new folder for the root directory of your Nginx environment.

$ cd ~/compose-test
$ mkdir app
shell

You can use any text editor like nano to create index.html.

$ nano app/index.html
shell

Here’s the HTML code for a sample page:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Test</title>
</head>
<body>
    <h1>This is a Docker Compose Test Page for an Nginx container.</h1>
</body>
</html>
html

Save and close the HTML file and create docker-compose.yml.

$ nano docker-compose.yml
shell

The contents are divided into the version number of the configuration and the services block.

version: '3.9'
services:
    web:
        image: nginx:alpine
        ports:
            - "8000:80"
        volumes:
- ./app:/usr/share/nginx/html
YAML

Within the services block, there is a single service named “web.” It is associated with the specified Nginx image and port redirection. In our configuration, any requests made to port 8000 on the host machine are redirected to the web container on port 80, where Nginx is running. Furthermore, we use a shared volume between the host and container. This makes the local “app” folder accessible to the Nginx application

Step 3: Execute Docker Compose

With the following command we create a web container and run the container environment in the background:

$ docker-compose up -d
shell

If the image specified in the YAML file is not present on the local system, it will be downloaded automatically.

To test whether the Nginx environment is running, enter the ps command.

$ docker-compose ps
shell

The sample page you created earlier is now accessible on localhost:8000 when you run the demo on your machine. If you’re using a remote server, simply specify the IP address of your server instead of “localhost”.

Sample page for an Nginx container

You can stop the container application using stop.

$ docker-compose stop
shell
Tip

Not sure how to get started with container tools? Check out our Docker tutorial and our overview of Docker Commands. Or find out more about Docker orchestration with Swarm and Compose.

We use cookies on our website to provide you with the best possible user experience. By continuing to use our website or services, you agree to their use. More Information.
Page top