Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Install Latest Docker and Docker-compose on Ubuntu
# Ask for the user password
# Script only works if sudo caches the password for a few minutes
sudo true
# Install kernel extra's to enable docker aufs support
# sudo apt-get -y install linux-image-extra-$(uname -r)
# Add Docker PPA and install latest version
# sudo apt-key adv --keyserver hkp:// --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
# sudo sh -c "echo deb docker main > /etc/apt/sources.list.d/docker.list"
# sudo apt-get update
# sudo apt-get install lxc-docker -y
# Alternatively you can use the official docker install script
wget -qO- | sh
# Install docker-compose
COMPOSE_VERSION=`git ls-remote | grep refs/tags | grep -oE "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1`
sudo sh -c "curl -L${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose"
sudo chmod +x /usr/local/bin/docker-compose
sudo sh -c "curl -L${COMPOSE_VERSION}/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose"
# Install docker-cleanup command
cd /tmp
git clone
cd 76b450a0c986e576e98b
sudo mv docker-cleanup /usr/local/bin/docker-cleanup
sudo chmod +x /usr/local/bin/docker-cleanup
Copy link

grillazz commented Jul 6, 2016

Thanks for script.

Copy link

emanuellarini commented Jul 17, 2016

Nice script! Made my day!

Copy link

raulsenaferreira commented Aug 12, 2016

Thanks for script. It saved hours of my time.

Copy link

wdullaer commented Aug 24, 2016

@luislobo that's a neat trick, I'll put that in here as well

Copy link

Jarzka commented Sep 11, 2016

I wonder why there is no easier way than searching a custom script from GitHub to install the latest version of Docker Compose...

Copy link

wting commented Sep 13, 2016

FYI I've found docker-gc a more robust substitute for docker-cleanup.

Copy link

thuannvn commented Sep 19, 2016

curl -sSL | sudo bash

Copy link

ivorscott commented Oct 8, 2016

@Jarzka because its bleeding edge

Copy link

devilrancy commented Dec 20, 2016

Thank you buddy for this script.

Copy link

xtdwps commented Jan 25, 2017

Regular expression for latest docker-compose releases (X.XX.X) should be fixed like:

Copy link

wdullaer commented Mar 3, 2017

@xtdwps thanks, updated

Copy link

DerekRoberts commented Mar 4, 2017

That regex requires two digits in the centre position. Here's a more flexible solution, but it's a mess. Anything better?

LIST=$( git ls-remote | grep "refs/tags" | grep -oP "[0-9]+(\.[0-9]+)+$" )
while [ $( echo "${LIST}" | wc -l ) -gt 1 ]
    DIGIT=$( echo "${LIST}" | grep -oP "^[0-9]+" | sort -g | tail -n 1 )
    LIST=$( echo "${LIST}" | sed -e "/^${DIGIT}/!d" -e "s/^${DIGIT}.//" )
VERSION=$( echo "${VERSION}" | sed "s/^\.//" )

Copy link

felipebizz commented Mar 10, 2017

Thanks a lot!

Copy link

patocardo commented Apr 12, 2017

¡¡Thank you very, very much!!

Copy link

MohamedHegab commented Apr 24, 2017

Thanks for this great script 👍

Copy link

n0ts commented Apr 26, 2017

Hi, I write a more simple script.

VERSION=$(curl -s -o /dev/null -I -w "%{redirect_url}\n" | grep -oP "[0-9]+(\.[0-9]+)+$")
curl -L$COMPOSE_VER/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

Copy link

rachelcarmena commented May 18, 2017

Thanks @n0ts!

There is an small typo:
COMPOSE_VER=$(curl -s -o /dev/null -I -w "%{redirect_url}\n" | grep -oP "[0-9]+(\.[0-9]+)+$")

and second command could be:

curl -o /usr/local/bin/docker-compose -L$COMPOSE_VER/docker-compose-$(uname -s)-$(uname -m)

I hope it's useful!

Copy link

EgorOmelyanenko commented Jul 24, 2017

Thank you very much!

Copy link

alexanderadam commented Jul 27, 2017

As the current installation process of docker compose is pretty creepy you may be interested in these issues: 2235 and 24210.
But at least there's a Docker / Moby PPA for Docker / Moby itself…

Copy link

natgho-reidin commented Aug 1, 2017

@madtechsupport here;


# Uninstall Script

if [ "${USER}" != "root" ]; then
    echo "$0 must be run as root!"
    exit 2

while true; do
  read -p "Remove all Docker Machine VMs? (Y/N): " yn
  case $yn in
    [Yy]* ) docker-machine rm -f $(docker-machine ls -q); break;;
    [Nn]* ) break;;
    * ) echo "Please answer yes or no."; exit 1;;

echo "Removing Applications..."
rm -rf /Applications/Docker

echo "Removing docker binaries..."
rm -f /usr/local/bin/docker
rm -f /usr/local/bin/docker-machine
rm -r /usr/local/bin/docker-machine-driver*
rm -f /usr/local/bin/docker-compose

echo "Removing boot2docker.iso"
rm -rf /usr/local/share/boot2docker

echo "All Done!"

Copy link

joeyhub commented Aug 25, 2017

This is not a recommended way to install if it you can avoid it. If you want to install it on debian you should package it into a deb. You can look at the source deb for it and try to up date that. The project might also contain a build script for deb somewhere.

Copy link

cpeeyush commented Aug 29, 2017

Awesome Thanks.

Copy link

komputronika commented Sep 11, 2017

Thanks for this script 👍

Copy link

Nihamavasa commented Oct 19, 2017

To overwrite exisiting docker-compose version one may use
COMPOSE_VER=$(curl -s -o /dev/null -I -w "%{redirect_url}\n" | grep -oP "[0-9]+(\.[0-9]+)+$")
curl -o $(which docker-compose) -L$COMPOSE_VER/docker-compose-$(uname -s)-$(uname -m)
Just if there allready is a docker-compose binary
But this is not fully tested.

Copy link

chiluap commented Nov 29, 2017

Hi there, thank you for taking the pain away from installing the latest docker version.

One little improvement though:
The script is dependent on git being installed.
Maybe add something like:
hash git 2>/dev/null || { echo >&2 "I require git but it's not installed. Aborting..."; exit 1;}

Copy link

andersonpem commented Nov 1, 2018

Oh my dayum! This script is delicious :)
Thank you sir.

Copy link

jseguillon commented Jan 9, 2019

A little warn here : please consider using -E (extended regex) instead of -P (Perl regex) in your grep expression. => Some grep may not support -P : busybox for example does not support this flag.

Copy link

hgraca commented Mar 4, 2020

Nice script, tkx.

However, sometimes the versions of docker-compose are not ordered and so the version downloaded is not the last one.

This fixes it:

COMPOSE_VERSION=`git ls-remote | grep refs/tags | grep -oP "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1`

Copy link

wdullaer commented Mar 5, 2020

I haven't updated this in a long time. I'm happy to see it still works.

Thanks for the feedback, I'll add your fix in.

Copy link

hophamlam commented Feb 10, 2022

Very useful script, thanks for the job, hope you have a good day!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment