Last active
February 16, 2018 19:32
-
-
Save sdr01810/f66848f75de00612bedbce26395c5a93 to your computer and use it in GitHub Desktop.
Install the latest stable Docker and associated tools.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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