Polish Docker one-command installer

This commit is contained in:
2026-09-08 14:41:48 +00:00
parent 50d2d8a6df
commit 657557dd9d
3 changed files with 263 additions and 19 deletions
Regular → Executable
+18 -19
View File
@@ -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
+81
View File
@@ -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.
+164
View File
@@ -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