75 lines
2.7 KiB
Bash
75 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
||
# Установка Docker Engine + Compose v2 из официального репозитория
|
||
# Запуск: sudo ./install-docker.sh [имя_пользователя_для_группы_docker]
|
||
#
|
||
# Поддерживается: Ubuntu, Debian
|
||
# Документация: https://docs.docker.com/engine/install/ubuntu/
|
||
|
||
set -euo pipefail
|
||
|
||
TARGET_USER="${1:-${SUDO_USER:-$(logname 2>/dev/null || echo root)}}"
|
||
|
||
log_info() { echo "[INFO] $*"; }
|
||
log_error() { echo "[ERROR] $*" >&2; }
|
||
|
||
[[ "${EUID}" -eq 0 ]] || { log_error "Запустите: sudo ./install-docker.sh"; exit 1; }
|
||
[[ -f /etc/os-release ]] || { log_error "Неизвестная ОС"; exit 1; }
|
||
|
||
# shellcheck disable=SC1091
|
||
source /etc/os-release
|
||
|
||
case "${ID}" in
|
||
ubuntu|debian)
|
||
DOCKER_REPO="https://download.docker.com/linux/${ID}"
|
||
;;
|
||
*)
|
||
log_error "Автоустановка поддерживает только Ubuntu/Debian (сейчас: ${ID})"
|
||
log_error "Установите Docker вручную: https://docs.docker.com/engine/install/"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
# Уже установлен?
|
||
if command -v docker &>/dev/null && docker compose version &>/dev/null 2>&1; then
|
||
log_info "Docker уже установлен: $(docker --version)"
|
||
if id -nG "${TARGET_USER}" 2>/dev/null | grep -qw docker; then
|
||
log_info "Пользователь ${TARGET_USER} уже в группе docker"
|
||
else
|
||
log_info "Добавляем ${TARGET_USER} в группу docker..."
|
||
usermod -aG docker "${TARGET_USER}"
|
||
log_info "Перелогиньтесь или выполните: newgrp docker"
|
||
fi
|
||
exit 0
|
||
fi
|
||
|
||
log_info "Установка Docker для ${PRETTY_NAME}..."
|
||
|
||
export DEBIAN_FRONTEND=noninteractive
|
||
apt-get update -qq
|
||
apt-get install -y -qq ca-certificates curl gnupg
|
||
|
||
install -m 0755 -d /etc/apt/keyrings
|
||
curl -fsSL "${DOCKER_REPO}/gpg" -o /etc/apt/keyrings/docker.asc
|
||
chmod a+r /etc/apt/keyrings/docker.asc
|
||
|
||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] ${DOCKER_REPO} \
|
||
${VERSION_CODENAME} stable" > /etc/apt/sources.list.d/docker.list
|
||
|
||
apt-get update -qq
|
||
apt-get install -y -qq \
|
||
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||
|
||
systemctl enable --now docker
|
||
|
||
if [[ "${TARGET_USER}" != root ]]; then
|
||
usermod -aG docker "${TARGET_USER}"
|
||
log_info "Пользователь ${TARGET_USER} добавлен в группу docker"
|
||
fi
|
||
|
||
log_info "Docker установлен: $(docker --version)"
|
||
log_info "Compose: $(docker compose version)"
|
||
|
||
if [[ "${TARGET_USER}" != root ]]; then
|
||
log_info "Если docker без sudo не работает — перелогиньтесь или: newgrp docker"
|
||
fi
|