#!/bin/bash # Script to install Docker on Ubuntu 24.04 # Must be run with root privileges # Error handling set -e trap 'echo "Error on line $LINENO. Exit code: $?"' ERR # Utility functions log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" } is_step_completed() { [ -f "/var/log/docker_install/$1" ] } save_checkpoint() { mkdir -p /var/log/docker_install touch "/var/log/docker_install/$1" } # Check if script is run as root if [ "$EUID" -ne 0 ]; then echo "Please run as root" exit 1 fi # Check Ubuntu version if ! grep -q "Ubuntu 24.04" /etc/os-release; then log_message "Warning: This script is designed for Ubuntu 24.04. Your version may differ." read -p "Do you want to continue? (y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # Remove old versions if exist if ! is_step_completed "old_versions_removed"; then log_message "Removing old Docker versions if they exist..." for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt-get remove -y $pkg >/dev/null 2>&1 || true done save_checkpoint "old_versions_removed" fi # Install prerequisites if ! is_step_completed "prerequisites_installed"; then log_message "Installing prerequisites..." apt-get update apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release save_checkpoint "prerequisites_installed" fi # Install Docker if ! is_step_completed "docker_installed"; then log_message "Installing Docker..." install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/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] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Create docker user if not exists if ! id "dockeruser" &>/dev/null; then useradd -m -s /bin/bash dockeruser usermod -aG docker dockeruser fi save_checkpoint "docker_installed" fi # Verify installation if ! is_step_completed "installation_verified"; then log_message "Verifying Docker installation..." if ! docker run hello-world > /dev/null; then log_message "Error: Docker installation verification failed" exit 1 fi save_checkpoint "installation_verified" fi # Configure Docker to start on boot if ! is_step_completed "docker_configured"; then log_message "Configuring Docker..." systemctl enable docker.service systemctl enable containerd.service save_checkpoint "docker_configured" fi # Set up Docker daemon configuration if ! is_step_completed "daemon_configured"; then log_message "Setting up Docker daemon configuration..." mkdir -p /etc/docker cat > /etc/docker/daemon.json <