'Installing latest docker compose on Ubuntu

I use the following to install the most recent docker compose for my ubuntu server:

curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

How to do I make this more version agnostic. For instance, so that I do not have to go in and keep changing the version -which in this case is 1.21.2. How do I change the command so it gets the most latest stable release?



Solution 1:[1]

How do I change the command so it gets the most latest stable release?

You could try following:

curl -L https://github.com/docker/compose/releases/download/`curl -Ls -o /dev/null -w %{url_effective} https://github.com/docker/compose/releases/latest | awk -F / '{print $NF}'`/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

This is same as your script only replacing actual version (1.21.2 in your case) with latest tag over several steps:

  • First we get redirection url for latest stable:

    curl -Ls -o /dev/null -w %{url_effective} https://github.com/docker/compose/releases/latest
    

    currently it resolves to https://github.com/docker/compose/releases/tag/1.21.2

  • Then we get version tag out of redirection url:

    | awk -F / '{print $NF}'
    

    currently resolving to 1.21.2

  • Finally we execute it in place of version number using your original curl statement. Note that this can break if latest tag is not properly redirected and ads some extra complexity, but automates version pulling as requested.

Solution 2:[2]

Accepted answer isn't the latest stable version according to https://docs.docker.com/compose/release-notes/ (returns v2 instead of the latest v1 which I was looking for)

This is the monstrosity I went with

rm -Rf /usr/local/bin/docker-compose && version=$(curl -s https://docs.docker.com/compose/release-notes/ | grep "Docker Compose release notes" | grep "Estimated reading time" | sed 's/.*id=//g' | sed 's/<.*$//g' | sed 's/.*>//g') && curl -L https://github.com/docker/compose/releases/download/${version}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Const
Solution 2 Trent