Docker Compose is an open source tool created for use in running multi container-based Docker applications. With Compose you easily a deployment with multiple container applications in a single file named docker-compose.yml. Then use the file definitions to spin up and manage your full application stack with single command docker-compose. Below is a simple docker-compose.yml file that can be used to create a web application with web server and database containers.

$ vim docker-compose.yml
version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: DBPassword

This post aims to be a concise instructional step-by-step guide for developers and SysAdmins seeking to setup Docker Compose on Linux. We will check the Github API releases page for the project, and pull the latest binary file.

How To Install Docker Compose on Linux

Follow the steps below to install and use Docker Compose on Linux from binary file.

1. Install Docker Compose

You need curl and wget installed on your system for this operation. And definitely, access to the Terminal as a user with sudo privileges.

### CentOS / RHEL ###
sudo yum -y install curl wget

### Debian / Ubuntu ###
sudo apt update
sudo apt install -y curl wget

### Fedora ###
sudo dnf -y install curl wget

Once curl has been installed, download the latest Compose on your Linux machine.

curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url  | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -

Make the binary file executable.

chmod +x docker-compose-linux-x86_64

Move the file to your PATH.

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

Confirm version.

$ docker-compose version
Docker Compose version v2.23.1

Add user to docker group:

sudo usermod -aG docker $USER
newgrp docker

2. Configure docker-compose shell completion

Compose has command completion for the bash and zsh shell.

For Bash users

Place the completion script in /etc/bash_completion.d/.

sudo curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Source the file or re-login to enjoy completion feature.

source /etc/bash_completion.d/docker-compose

For Zsh users

Download the completion script in your ~/.zsh/completion/

mkdir -p ~/.zsh/completion
curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/zsh/_docker-compose > ~/.zsh/completion/_docker-compose

Include the directory in your $fpath by adding in ~/.zshrc:

fpath=(~/.zsh/completion $fpath)

Make sure compinit is loaded or do it by adding in ~/.zshrc:

autoload -Uz compinit && compinit -i

Then reload your shell:

exec $SHELL -l

3. Test Docker Compose installation

Our comprehensive guide is on Managing Docker Containers with Docker Compose

Create a test Docker Compose file.

vim docker-compose.yml

Add below data to the file.

version: '3'  
services:
  web:
    image: nginx:latest
    ports:
     - "8080:80"
    links:
     - php
  php:
    image: php:7-fpm

Start service containers.

$ docker-compose up -d
Creating network "root_default" with the default driver
Pulling php (php:7-fpm)...
7-fpm: Pulling from library/php
b4d181a07f80: Pull complete
78b85dd8f014: Pull complete
8589b26a90be: Pull complete
f5af5d641946: Pull complete
4611dfe4969e: Pull complete
8d335174dcfe: Pull complete
e4ac2aba3855: Pull complete
1ec2992b064f: Pull complete
d0702e432261: Pull complete
508ceaa40a86: Pull complete
Digest: sha256:c5132fe8a019128a89bcc157f5e2b8544ea3078fb9aba076bfe27486f34b0fb5
Status: Downloaded newer image for php:7-fpm
Pulling web (nginx:latest)...
latest: Pulling from library/nginx
b4d181a07f80: Already exists
edb81c9bc1f5: Pull complete
b21fed559b9f: Pull complete
03e6a2452751: Pull complete
b82f7f888feb: Pull complete
5430e98eba64: Pull complete
Digest: sha256:47ae43cdfc7064d28800bc42e79a429540c7c80168e8c8952778c0d5af1c09db
Status: Downloaded newer image for nginx:latest
Creating root_php_1 ... done
Creating root_web_1 ... done

Show running Containers

$ docker-compose ps
   Name                 Command               State                  Ports
------------------------------------------------------------------------------------------
root_php_1   docker-php-entrypoint php-fpm    Up      9000/tcp
root_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080->80/tcp,:::8080->80/tcp

Destroy containers

$ docker-compose stop
Stopping root_web_1 ... done
Stopping root_php_1 ... done

$ docker-compose rm -f
Going to remove root_web_1, root_php_1
Removing root_web_1 ... done
Removing root_php_1 ... done

Go through Official Docker documentation and Docker Compose documentation to learn more.

More guides:

YOU CAN SUPPORT OUR WORK WITH A CUP OF COFFEE


As we continue to grow, we would wish to reach and impact more people who visit and take advantage of the guides we have on our blog. This is a big task for us and we are so far extremely grateful for the kind people who have shown amazing support for our work over the time we have been online.

Thank You for your support as we work to give you the best of guides and articles. Click below to buy us a coffee.

7 COMMENTS

  1. Muito obrigado por compartilhar seu conhecimento de forma gratuita !
    Nos estudantes no inicio do aprendizado nos beneficiamos muito com estes conteudo de bom nivel de informaçao .

  2. FYI – “grep docker-compose-linux-x86_64” did not work for my Raspberry Pi 4 Debian Linux setup. I worked around by replacing the “x86_64” “docker-compose” file with the AARCH file from the GIT for Docker Compose.

LEAVE A REPLY

Please enter your comment!
Please enter your name here