diff --git a/install-docker.sh b/install-docker.sh new file mode 100644 index 0000000..c94f5a7 --- /dev/null +++ b/install-docker.sh @@ -0,0 +1,136 @@ +#!/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 <