Skip to content

Instantly share code, notes, and snippets.

@asimzeeshan
Created April 2, 2025 23:06
Show Gist options
  • Save asimzeeshan/91afc75bf06e7a113721e03903419be7 to your computer and use it in GitHub Desktop.
Save asimzeeshan/91afc75bf06e7a113721e03903419be7 to your computer and use it in GitHub Desktop.
Install latest docker-compose using Linux CLI
# ============================================================
# Download and install latest release
# ============================================================
get_latest_release() {
curl --silent "https://api.github.com/repos/$1/releases/latest" | # Get latest release from GitHub api
grep '"tag_name":' | # Get tag line
sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value
}
curl -L https://github.com/docker/compose/releases/download/`get_latest_release "docker/compose"`/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
@asimzeeshan
Copy link
Author

Improved version

#!/bin/bash
set -euo pipefail

# ============================================================
# Get latest GitHub release tag for a repo
# ============================================================
get_latest_release() {
  local repo="$1"
  local latest_tag

  latest_tag=$(curl --silent "https://api.github.com/repos/${repo}/releases/latest" |
    grep '"tag_name":' |
    sed -E 's/.*"([^"]+)".*/\1/')

  if [[ -z "$latest_tag" ]]; then
    echo "❌ Failed to fetch latest release for ${repo}" >&2
    exit 1
  fi

  echo "$latest_tag"
}

# ============================================================
# Install Docker Compose
# ============================================================
install_docker_compose() {
  local repo="docker/compose"
  local latest_version
  local target_path="/usr/local/bin/docker-compose"
  local os="$(uname -s)"
  local arch="$(uname -m)"

  latest_version=$(get_latest_release "$repo")
  echo "⬇️ Installing Docker Compose version ${latest_version}"

  local download_url="https://github.com/${repo}/releases/download/${latest_version}/docker-compose-${os}-${arch}"

  curl -L "$download_url" -o "$target_path"
  chmod +x "$target_path"

  if command -v docker-compose >/dev/null; then
    echo "✅ Docker Compose installed successfully at ${target_path}"
    docker-compose --version
  else
    echo "❌ Docker Compose installation failed." >&2
    exit 1
  fi
}

install_docker_compose

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