#!/usr/bin/env bash # 20-docker — Docker Engine + Compose v2 plugin. $USER added to docker group. step_name="docker" step_desc="docker engine + compose v2, add \$USER to docker group" step_run="run_docker" run_docker() { log "installing docker + compose v2" if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then ok "docker + compose v2 already installed" else case "$DISTRO" in arch) sudo_ pacman -Sy --noconfirm --needed docker docker-compose ;; debian) _docker_debian ;; esac fi # enable + start (best-effort; skip inside containers without systemd) if command -v systemctl >/dev/null 2>&1 && systemctl is-system-running >/dev/null 2>&1; then sudo_ systemctl enable --now docker.service containerd.service 2>/dev/null \ || warn "could not enable docker.service (no systemd?)" else warn "systemctl unavailable — start docker manually if needed" fi # add current user to docker group if getent group docker >/dev/null 2>&1; then if id -nG "$USER" | grep -qw docker; then ok "$USER already in docker group" else sudo_ usermod -aG docker "$USER" ok "$USER added to docker group (log out/in or 'newgrp docker' to use it)" fi fi } _docker_debian() { sudo_ install -m 0755 -d /etc/apt/keyrings 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 local codename; codename="$(. /etc/os-release; echo "$VERSION_CODENAME")" echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $codename stable" \ | sudo_ tee /etc/apt/sources.list.d/docker.list >/dev/null sudo_ apt-get update -y sudo_ apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin }