Polish Docker one-command installer
This commit is contained in:
Regular → Executable
+18
-19
@@ -1,21 +1,20 @@
|
|||||||
sudo apt update
|
#!/usr/bin/env bash
|
||||||
sudo apt install -y ca-certificates curl gnupg lsb-release
|
# Backward-compatible entrypoint for the old filename.
|
||||||
sudo install -m 0755 -d /etc/apt/keyrings
|
# Prefer install-docker.sh for new installs.
|
||||||
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg \
|
|
||||||
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
|
||||||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
|
||||||
echo \
|
|
||||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
|
|
||||||
https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
|
|
||||||
$(lsb_release -cs) stable" \
|
|
||||||
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
||||||
sudo systemctl enable --now docker
|
|
||||||
|
|
||||||
#Add user to docker group to use docker without sudo
|
set -Eeuo pipefail
|
||||||
#sudo usermod -aG docker $USER
|
|
||||||
|
|
||||||
#User this to confirm the install was successful
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" 2>/dev/null && pwd || true)"
|
||||||
#docker --version
|
LOCAL_INSTALLER="${SCRIPT_DIR}/install-docker.sh"
|
||||||
#docker compose version
|
RAW_INSTALLER_URL="https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh"
|
||||||
|
|
||||||
|
if [[ -n "$SCRIPT_DIR" && -x "$LOCAL_INSTALLER" ]]; then
|
||||||
|
exec "$LOCAL_INSTALLER" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
curl -fsSL "$RAW_INSTALLER_URL" | bash -s -- "$@"
|
||||||
|
else
|
||||||
|
echo "curl is required when running Docker-Install.sh without a local install-docker.sh file." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# Docker-Install
|
||||||
|
|
||||||
|
A polished one-command Docker installer for fresh Ubuntu/Debian servers.
|
||||||
|
|
||||||
|
It installs:
|
||||||
|
|
||||||
|
- Docker Engine
|
||||||
|
- Docker CLI
|
||||||
|
- containerd
|
||||||
|
- Docker Buildx plugin
|
||||||
|
- Docker Compose plugin
|
||||||
|
|
||||||
|
It can also optionally add a chosen Linux user to the `docker` group so Docker commands can be run without `sudo` after the user logs out/in.
|
||||||
|
|
||||||
|
## One-command install
|
||||||
|
|
||||||
|
Install Docker only:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Install Docker and add the current SSH/login user to the docker group:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash -s -- --current-user
|
||||||
|
```
|
||||||
|
|
||||||
|
Install Docker and add a specific user to the docker group:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash -s -- --user obin
|
||||||
|
```
|
||||||
|
|
||||||
|
Non-interactive install without adding a docker user:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash -s -- --yes
|
||||||
|
```
|
||||||
|
|
||||||
|
## Local usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://gitea.wheelytho.com/Wheelz/Docker-Install.git
|
||||||
|
cd Docker-Install
|
||||||
|
chmod +x install-docker.sh
|
||||||
|
./install-docker.sh --current-user
|
||||||
|
```
|
||||||
|
|
||||||
|
The old `Docker-Install.sh` filename still exists as a compatibility wrapper.
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
```text
|
||||||
|
--user USER Add USER to the docker group after install.
|
||||||
|
--current-user Add the invoking SSH/login user to the docker group.
|
||||||
|
--no-docker-user Do not add anyone to the docker group.
|
||||||
|
-y, --yes Non-interactive defaults. Skips docker group unless --user/--current-user is supplied.
|
||||||
|
-h, --help Show help.
|
||||||
|
```
|
||||||
|
|
||||||
|
## After adding a user to the docker group
|
||||||
|
|
||||||
|
Group membership does not apply to already-open shells. Log out and back in, or run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
newgrp docker
|
||||||
|
```
|
||||||
|
|
||||||
|
Then verify Docker works without sudo:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm hello-world
|
||||||
|
```
|
||||||
|
|
||||||
|
## Supported systems
|
||||||
|
|
||||||
|
- Ubuntu
|
||||||
|
- Debian
|
||||||
|
|
||||||
|
The installer uses Docker's official apt repository for the detected OS and codename.
|
||||||
Executable
+164
@@ -0,0 +1,164 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
SCRIPT_NAME="$(basename "$0")"
|
||||||
|
DEFAULT_USER="${SUDO_USER:-${USER:-}}"
|
||||||
|
DOCKER_USER=""
|
||||||
|
ADD_DOCKER_GROUP="ask"
|
||||||
|
ASSUME_YES="false"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'USAGE'
|
||||||
|
Install Docker Engine and Docker Compose plugin on a fresh Debian/Ubuntu server.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
./install-docker.sh [options]
|
||||||
|
curl -fsSL <raw-url>/install-docker.sh | bash -s -- [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--user USER Add USER to the docker group after install.
|
||||||
|
--current-user Add the invoking user to the docker group.
|
||||||
|
--no-docker-user Do not add anyone to the docker group.
|
||||||
|
-y, --yes Non-interactive defaults. Installs Docker and skips docker group unless --user/--current-user is also supplied.
|
||||||
|
-h, --help Show this help.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash -s -- --user obin
|
||||||
|
curl -fsSL https://gitea.wheelytho.com/Wheelz/Docker-Install/raw/branch/main/install-docker.sh | bash -s -- --current-user
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
log() { printf '\n[Docker-Install] %s\n' "$*"; }
|
||||||
|
warn() { printf '\n[Docker-Install WARNING] %s\n' "$*" >&2; }
|
||||||
|
fail() { printf '\n[Docker-Install ERROR] %s\n' "$*" >&2; exit 1; }
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--user)
|
||||||
|
[[ $# -ge 2 ]] || fail "--user requires a username"
|
||||||
|
DOCKER_USER="$2"
|
||||||
|
ADD_DOCKER_GROUP="yes"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--current-user)
|
||||||
|
[[ -n "$DEFAULT_USER" && "$DEFAULT_USER" != "root" ]] || fail "Could not determine a non-root invoking user. Use --user USER instead."
|
||||||
|
DOCKER_USER="$DEFAULT_USER"
|
||||||
|
ADD_DOCKER_GROUP="yes"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--no-docker-user)
|
||||||
|
ADD_DOCKER_GROUP="no"
|
||||||
|
DOCKER_USER=""
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-y|--yes)
|
||||||
|
ASSUME_YES="true"
|
||||||
|
[[ "$ADD_DOCKER_GROUP" == "ask" ]] && ADD_DOCKER_GROUP="no"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fail "Unknown option: $1. Run with --help for usage."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${EUID}" -ne 0 ]]; then
|
||||||
|
if command -v sudo >/dev/null 2>&1; then
|
||||||
|
SUDO="sudo"
|
||||||
|
else
|
||||||
|
fail "This installer needs root privileges. Re-run as root or install sudo."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
SUDO=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -r /etc/os-release ]]; then
|
||||||
|
fail "Cannot read /etc/os-release. This installer supports Debian/Ubuntu style systems."
|
||||||
|
fi
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /etc/os-release
|
||||||
|
OS_ID="${ID:-}"
|
||||||
|
OS_CODENAME="${VERSION_CODENAME:-}"
|
||||||
|
|
||||||
|
case "$OS_ID" in
|
||||||
|
ubuntu|debian) ;;
|
||||||
|
*) fail "Unsupported OS '${OS_ID:-unknown}'. This script currently supports Ubuntu and Debian." ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ -z "$OS_CODENAME" ]] && command -v lsb_release >/dev/null 2>&1; then
|
||||||
|
OS_CODENAME="$(lsb_release -cs)"
|
||||||
|
fi
|
||||||
|
[[ -n "$OS_CODENAME" ]] || fail "Could not determine OS codename for Docker apt repo."
|
||||||
|
|
||||||
|
if [[ "$ADD_DOCKER_GROUP" == "ask" ]]; then
|
||||||
|
if [[ -n "$DEFAULT_USER" && "$DEFAULT_USER" != "root" && -t 0 ]]; then
|
||||||
|
read -r -p "Add '${DEFAULT_USER}' to the docker group for passwordless docker commands? [y/N]: " reply
|
||||||
|
case "$reply" in
|
||||||
|
[Yy]*) ADD_DOCKER_GROUP="yes"; DOCKER_USER="$DEFAULT_USER" ;;
|
||||||
|
*) ADD_DOCKER_GROUP="no" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
ADD_DOCKER_GROUP="no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$ADD_DOCKER_GROUP" == "yes" ]]; then
|
||||||
|
[[ -n "$DOCKER_USER" ]] || fail "Docker group add requested but no user was selected. Use --user USER."
|
||||||
|
id "$DOCKER_USER" >/dev/null 2>&1 || fail "User '$DOCKER_USER' does not exist. Create the user first or choose a different username."
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Installing prerequisites"
|
||||||
|
$SUDO apt-get update
|
||||||
|
$SUDO apt-get install -y ca-certificates curl gnupg
|
||||||
|
|
||||||
|
log "Adding Docker's official apt repository for ${OS_ID} ${OS_CODENAME}"
|
||||||
|
$SUDO install -m 0755 -d /etc/apt/keyrings
|
||||||
|
curl -fsSL "https://download.docker.com/linux/${OS_ID}/gpg" | $SUDO gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
|
||||||
|
$SUDO chmod a+r /etc/apt/keyrings/docker.gpg
|
||||||
|
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${OS_ID} ${OS_CODENAME} stable" \
|
||||||
|
| $SUDO tee /etc/apt/sources.list.d/docker.list >/dev/null
|
||||||
|
|
||||||
|
log "Installing Docker Engine and Compose plugin"
|
||||||
|
$SUDO apt-get update
|
||||||
|
$SUDO apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||||
|
|
||||||
|
log "Enabling and starting Docker"
|
||||||
|
$SUDO systemctl enable --now docker
|
||||||
|
|
||||||
|
if [[ "$ADD_DOCKER_GROUP" == "yes" ]]; then
|
||||||
|
log "Adding '${DOCKER_USER}' to the docker group"
|
||||||
|
$SUDO groupadd -f docker
|
||||||
|
$SUDO usermod -aG docker "$DOCKER_USER"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Verifying install"
|
||||||
|
$SUDO docker --version
|
||||||
|
docker compose version || $SUDO docker compose version
|
||||||
|
$SUDO docker run --rm hello-world >/dev/null
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
Docker install completed successfully.
|
||||||
|
|
||||||
|
Next steps:
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [[ "$ADD_DOCKER_GROUP" == "yes" ]]; then
|
||||||
|
cat <<EOF
|
||||||
|
- '${DOCKER_USER}' was added to the docker group.
|
||||||
|
- Log out and back in, or run: newgrp docker
|
||||||
|
- Then test without sudo: docker run --rm hello-world
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat <<EOF
|
||||||
|
- Use Docker with sudo, or add a user later with:
|
||||||
|
sudo usermod -aG docker <username>
|
||||||
|
newgrp docker
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user