Skip to content

Instantly share code, notes, and snippets.

@sdr01810
Last active February 16, 2018 19:32
Show Gist options
  • Save sdr01810/f66848f75de00612bedbce26395c5a93 to your computer and use it in GitHub Desktop.
Save sdr01810/f66848f75de00612bedbce26395c5a93 to your computer and use it in GitHub Desktop.
Install the latest stable Docker and associated tools.
#!/usr/bin/env bash
## Install the latest stable Docker and associated tools.
## By Stephen D. Rogers <inbox@c7r@steve-rogers.com>, 2017-04.
##
set -e
cmd_apt_get="${cmd_apt_get:-xx sudo apt-get --quiet}"
my_user_name="${my_user_name:-$(id -un)}"
if [ "$(type -t os_release_id)" != "function" ] ; then
get_os_release_id() {
local f1
for f1 in /etc/os-release ; do
(
[ -e "$f1" ] || continue
source "$f1"
echo "${ID}"
)
done
}
fi
os_release_id="$(get_os_release_id)"
if [ -z "${os_release_id}" ] ; then
echo 1>&2 "Cannot determine operating system release ID"
exit 1
fi
if [ "$(type -t sudo)" != "function" ] ; then
sudo() {
if [ "$(id -u)" -eq 0 ] ; then
"$@"
else
command sudo "$@"
fi
}
fi
if [ "$(type -t never_mind_optional_package)" != "function" ] ; then
never_mind_optional_package() {
echo 1>&2 "^-- Package is not required; continuing without it..."
}
fi
if [ "$(type -t xx)" != "function" ] ; then
xx() {
echo 1>&2 "+" "$@"
"$@"
}
fi
##
docker_apt_repository_url="https://download.docker.com/linux/${os_release_id}"
docker_apt_repository_gpg_key_url="https://download.docker.com/linux/${os_release_id}/gpg"
docker_apt_repository_gpg_key_fingerprint="0EBFCD88"
docker_machine_version=0.12.2 # see <https://github.com/docker/machine/releases/>
docker_machine_version=0.13.0 # see <https://github.com/docker/machine/releases/>
docker_machine_download_url="https://github.com/docker/machine/releases/download"
docker_machine_script_url="${docker_machine_download_url}/v${docker_machine_version}/docker-machine"-`uname -s`-`uname -m`
docker_version() {
(docker --version 2>&- || :) |
perl -pe 's{^([^\d]*?)([\d.]+)(.*$)}{$2}'
}
docker_version_major() {
docker_version | perl -pe 's{\..*}{}'
}
docker_version_major_min=17
docker_os_release_code_name() {
local result="$(lsb_release -cs)"
case "$result" in
artful)
result=zesty # as of 2017-12-22: no build for Ubuntu 17.10; use 17.04 build instead
;;
esac
echo "$result"
}
install_docker_apt_repository() {
$cmd_apt_get install -y apt-transport-https ca-certificates curl software-properties-common
xx curl -fsSL "${docker_apt_repository_gpg_key_url}" | xx sudo apt-key add -
xx sudo apt-key fingerprint "${docker_apt_repository_gpg_key_fingerprint}"
case "$(uname -m)" in
x86_64)
xx sudo add-apt-repository "deb [arch=amd64] ${docker_apt_repository_url} $(docker_os_release_code_name) stable"
;;
*)
echo 1>&2 "WARNING: Cannot add apt(1) repository for docker on this platform: $(uname -m)"
;;
esac
}
install_docker_core() {
local docker_packages_old="docker{,-compose,-doc,-registry}"
local docker_packages_new="docker-ce"
local g1 v1
##
for v1 in "$(docker_version_major)" ; do
if [ -n "$v1" ] && [ "$(($v1 < $docker_version_major_min))" -eq 1 ] ; then
eval "$cmd_apt_get remove -y ${docker_packages_old}"
fi
done
eval "$cmd_apt_get install -y ${docker_packages_new}"
##
for g1 in docker ; do
getent group "$g1" >/dev/null 2>&1 || continue
xx sudo usermod --append --groups "$g1" "$my_user_name"
done
xx docker --version || :
}
install_docker_machine() {
local f1 f2
for f1 in docker-machine ; do
for f2 in /usr/local/bin/"$f1" ; do
(
umask 0002
f1_tmp="$(dirname "$f2")/.tmp.$$.$(basename "$f2")"
trap "xx rm -f '$f1_tmp'" EXIT
xx curl -fsSL "${docker_machine_script_url}" |
xx sudo cp /dev/stdin "$f1_tmp"
xx sudo chmod +rx "$f1_tmp"
xx sudo mv "$f1_tmp" "$f2"
)
done
done
xx docker-machine --version || :
}
install_docker_compose() {
$cmd_apt_get install -y docker-compose || never_mind_optional_package
}
##
install_docker_apt_repository
xx sudo apt-get update
install_docker_core
install_docker_machine
install_docker_compose
##
if false ; then # install extra tools
$cmd_apt_get install -y python-docker{,pty}
$cmd_apt_get install -y python3-docker{,pty}
$cmd_apt_get install -y deb{ocker,ootstick}
$cmd_apt_get install -y cadvisor ctop
fi
##
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment