#!/bin/bash install_docker() { log_info "Installing Docker..." case $DISTRO in ubuntu|debian) # Update package index and install prerequisites handle_error sudo apt-get update handle_error sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # Add Docker's official GPG key handle_error curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Add Docker's official APT repository handle_error echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Update package index again handle_error sudo apt-get update # Install Docker CE and Compose plugin handle_error sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin ;; fedora) # Add Docker repository handle_error sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo # Install Docker CE handle_error sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin ;; arch) # Install Docker from official Arch repos (usually up-to-date) handle_error sudo pacman -S --noconfirm docker docker-compose ;; opensuse) # Add Docker repository handle_error sudo zypper addrepo https://download.docker.com/linux/opensuse/docker-ce.repo handle_error sudo zypper refresh # Install Docker CE handle_error sudo zypper install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin ;; *) log_error "Unsupported Linux distribution: $DISTRO" exit 1 ;; esac # Add user to the docker group handle_error sudo usermod -aG docker "$NEW_USER" handle_error sudo systemctl enable docker handle_error sudo systemctl start docker # Configure Docker data directory if [[ "$DOCKER_DATA_DIR" != "$DEFAULT_DOCKER_DATA_DIR" ]]; then log_info "Configuring Docker data directory to $DOCKER_DATA_DIR..." handle_error sudo mkdir -p "$DOCKER_DATA_DIR" echo "{\"data-root\": \"$DOCKER_DATA_DIR\"}" | sudo tee /etc/docker/daemon.json > /dev/null handle_error sudo systemctl restart docker fi export DOCKER_CONTENT_TRUST=1 log_info "Docker installed successfully." log_info "Instructions for installing Docker in rootless mode:" echo "1. Ensure required packages are installed: uidmap" echo "2. Run Docker rootless installation script: curl -fsSL https://get.docker.com/rootless | sh" echo "3. Set the following environment variables in your shell profile (e.g., ~/.bashrc):" echo " export PATH=/usr/bin:\$PATH" echo " export DOCKER_HOST=unix:///run/user/\$(id -u)/docker.sock" echo "4. Start and enable Docker service in user mode:" echo " systemctl --user start docker" echo " systemctl --user enable docker" echo "5. Enable linger for the user:" echo " sudo loginctl enable-linger \$(whoami)" }