#!/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