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:
- Ctop – Top command for container metrics
- How to Install Portainer Docker UI manager
- How To run Local Kubernetes clusters in Docker
- Deploy Lightweight Kubernetes with MicroK8s and Snap
- How to run Minikube on KVM















































































This helped me a lot and saved my day. Thank you Josphat!
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 .
bienvenida!
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.
Good point.
It worked as & got my foot in the door, thanks!!
Awesome welcome.