Add install-docker.sh

This commit is contained in:
HHF Technology 2024-12-06 22:02:33 +05:30
parent 7baef3f50c
commit 5c748b4759

136
install-docker.sh Normal file
View file

@ -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 <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 24
}
]
}
EOF
save_checkpoint "daemon_configured"
fi
# Restart Docker to apply changes
if ! is_step_completed "final_restart"; then
log_message "Restarting Docker service..."
systemctl restart docker
save_checkpoint "final_restart"
fi
log_message "Docker installation completed successfully!"
log_message "Docker version: $(docker --version)"
log_message "Docker Compose version: $(docker compose version)"
log_message "Docker user 'dockeruser' has been created and added to the docker group"
log_message "You may need to log out and back in for group changes to take effect"