#!/bin/bash # Docker installation script using official convenience script # https://docs.docker.com/engine/install/ # This script always uses the latest installation method from Docker set -e yellow='\033[1;33m' green='\033[1;32m' red='\033[1;31m' no_color='\033[0m' need_install_docker=0 # Add user to docker group setup_docker_group() { echo "" getent group docker || sudo groupadd docker if id -nG "$USER" | grep -qw docker; then echo -e "${green}User '$USER' is already in the docker group${no_color}" return fi echo -e "${yellow}Do you want to add user '$USER' to the docker group?${no_color}" echo "This allows running Docker commands without sudo." echo -e "${yellow}Note: You will need to log out and back in for this to take effect.${no_color}" read -p "Add to docker group? [y/N]: " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then sudo usermod -aG docker "$USER" echo -e "${green}User '$USER' added to docker group successfully!${no_color}" echo -e "${yellow}Please log out and back in for this to take effect.${no_color}" else echo -e "${yellow}Skipped adding user to docker group. You can add it later with:${no_color}" echo -e "${yellow} sudo usermod -aG docker \$USER${no_color}" fi } install_docker() { echo -e "${yellow}Installing Docker using official convenience script...${no_color}" echo -e "${yellow}This script is always up-to-date from https://get.docker.com${no_color}" need_install_docker=1 # Use Docker's official convenience script # https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script curl -fsSL https://get.docker.com -o /tmp/get-docker.sh sudo sh /tmp/get-docker.sh rm -f /tmp/get-docker.sh setup_docker_group # Verify Docker Compose plugin is installed if docker compose version &>/dev/null; then echo -e "${green}Docker Compose plugin is available: $(docker compose version)${no_color}" fi echo -e "${green}Docker installed successfully!${no_color}" echo -e "${yellow}Note: You may need to log out and back in for group changes to take effect.${no_color}" } # Parse command line arguments first while [[ "$1" != "" ]]; do case "$1" in --docker) install_docker exit 0 ;; --add) if ! command -v "docker" &>/dev/null; then echo -e "${red}Docker is not installed. Please install Docker first.${no_color}" echo "Run: bash $0 --docker" exit 1 fi setup_docker_group exit 0 ;; --help|-h) echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " --docker Force reinstall Docker" echo " --add Add current user to docker group" echo " --help, -h Show this help message" echo "" echo "Supported OS: Ubuntu, Debian, CentOS, Fedora" echo "Docker Compose is included as a plugin (docker-compose-plugin)" echo "See https://docs.docker.com/engine/install/ for more information" exit 0 ;; *) echo -e "${red}Unknown option: $1${no_color}" echo "Use --help for usage information" exit 1 ;; esac shift done # Main logic - only runs if no arguments provided if ! command -v "docker" &>/dev/null; then install_docker fi if [[ "$need_install_docker" == 0 ]]; then echo -e "${green}Docker is already installed${no_color}" echo "You can use --docker to reinstall or --add to join docker group" if docker compose version &>/dev/null; then echo -e "${green}Docker Compose plugin: $(docker compose version)${no_color}" fi fi