Skip to content

Instantly share code, notes, and snippets.

@mikedougherty
Last active June 17, 2016 18:07
Show Gist options
  • Select an option

  • Save mikedougherty/60ffc8f62caa2ee7334d to your computer and use it in GitHub Desktop.

Select an option

Save mikedougherty/60ffc8f62caa2ee7334d to your computer and use it in GitHub Desktop.
Script to get the latest static binaries of docker, docker-machine, docker-compose.
#!/bin/bash
# Requires: jq, curl
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
[[ -n "$GITHUB_TOKEN" ]] && AUTH_ARGS="-u $GITHUB_TOKEN:"
function machine_url() {
echo "https://github.com/docker/machine/releases/download/${1}/docker-machine-$( uname -s )-$( uname -m)"
}
function compose_url() {
echo "https://github.com/docker/compose/releases/download/${1}/docker-compose-$( uname -s )-$( uname -m )"
}
function docker_url() {
DOMAIN="get.docker.com"
[[ "$1" == *"rc"* ]] && DOMAIN="test.docker.com"
echo "https://$DOMAIN/builds/$(uname -s)/$(uname -m)/docker-${1//v/}.tgz"
}
function default_unpack() {
cat /dev/stdin > /dev/stdout
}
function docker_unpack() {
tar -Oxzf /dev/stdin docker/docker
}
function get_latest_release() {
curl $AUTH_ARGS -sSL "https://api.github.com/repos/${1}/releases?per_page=1" | jq -r ".[0].tag_name"
}
function update() {
REPO=$1 ; shift
NAME=$1 ; shift
URL_FUNC=$1 ; shift
UNPACK_FUNC=$1 ; shift
trap 'echo "Failed to get ${NAME}" >&2' EXIT
VERSION=$( get_latest_release "$REPO" )
echo -n "Downloading ${NAME}-${VERSION} ... "
curl $AUTH_ARGS -sSL "$(eval "$URL_FUNC" "${VERSION}")" | $UNPACK_FUNC > "${NAME}-${VERSION}"
chmod u+x "${NAME}-${VERSION}"
ln -nfs "$(pwd)/${NAME}-${VERSION}" "${NAME}"
echo -n "done: "
eval "${NAME} --version"
trap '' EXIT
}
function docker_updater_main() {
pushd "$DIR" >/dev/null
update docker/docker docker-client docker_url docker_unpack
update docker/machine docker-machine machine_url default_unpack
update docker/compose docker-compose compose_url default_unpack
popd >/dev/null
}
docker_updater_main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment