Add install-docker.sh
This commit is contained in:
parent
7baef3f50c
commit
5c748b4759
1 changed files with 136 additions and 0 deletions
136
install-docker.sh
Normal file
136
install-docker.sh
Normal 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"
|
Loading…
Reference in a new issue