How do I install Docker Compose on Ubuntu 22.04/20.04/18.04 | Debian 11/10 | CentOS 8 | Fedora 36/35/34/33/32?. This guide will show you how to Install the Latest Docker Compose on Linux. Compose is a tool for defining and running multi-container Docker application. A YAML file is used to configure your application’s services.
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
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.11.2
Add user to docker group:
sudo usermod -aG docker $USER
newgrp docker
Configure Compose Command-line 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
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.