212 lines
6.8 KiB
Bash
Executable file
212 lines
6.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Detect platform
|
|
PLATFORM="$(uname)"
|
|
|
|
# Function to detect Docker runtime on macOS
|
|
detect_docker_runtime_macos() {
|
|
if command -v colima &>/dev/null; then
|
|
echo "colima"
|
|
elif [ -d "/Applications/Docker.app" ] || command -v docker &>/dev/null; then
|
|
echo "docker-desktop"
|
|
else
|
|
echo "none"
|
|
fi
|
|
}
|
|
detect_linux_package_manager() {
|
|
if command -v apt-get &>/dev/null; then
|
|
echo "apt"
|
|
elif command -v yum &>/dev/null; then
|
|
echo "yum"
|
|
elif command -v dnf &>/dev/null; then
|
|
echo "dnf"
|
|
elif command -v pacman &>/dev/null; then
|
|
echo "pacman"
|
|
else
|
|
echo "unknown"
|
|
fi
|
|
}
|
|
|
|
# Function to install Docker on Linux
|
|
install_docker_linux() {
|
|
local pkg_manager
|
|
pkg_manager=$(detect_linux_package_manager)
|
|
|
|
echo "Docker is not installed."
|
|
read -rp "Do you want to install Docker using $pkg_manager? (y/n): " choice
|
|
if [ "$choice" == "y" ]; then
|
|
case $pkg_manager in
|
|
"apt")
|
|
sudo apt-get update
|
|
sudo apt-get install -y docker.io docker-compose
|
|
sudo systemctl enable --now docker
|
|
sudo usermod -aG docker "$USER"
|
|
echo "Docker has been installed. Please log out and back in, then restart this script."
|
|
;;
|
|
"yum"|"dnf")
|
|
sudo "$pkg_manager" install -y docker docker-compose
|
|
sudo systemctl enable --now docker
|
|
sudo usermod -aG docker "$USER"
|
|
echo "Docker has been installed. Please log out and back in, then restart this script."
|
|
;;
|
|
"pacman")
|
|
sudo pacman -S docker docker-compose
|
|
sudo systemctl enable --now docker
|
|
sudo usermod -aG docker "$USER"
|
|
echo "Docker has been installed. Please log out and back in, then restart this script."
|
|
;;
|
|
*)
|
|
echo "Unsupported package manager. Please install Docker manually."
|
|
exit 1
|
|
;;
|
|
esac
|
|
exit 0
|
|
else
|
|
echo "Docker is required to run this script. Exiting."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Function to start Docker if not running
|
|
start_docker() {
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
local runtime
|
|
runtime=$(detect_docker_runtime_macos)
|
|
|
|
if [ "$runtime" == "colima" ]; then
|
|
if ! colima status 2>/dev/null | grep -q "Running"; then
|
|
echo "Docker is not running. Starting Colima..."
|
|
colima start
|
|
sleep 3
|
|
fi
|
|
elif [ "$runtime" == "docker-desktop" ]; then
|
|
echo "Docker is not running. Starting Docker Desktop..."
|
|
open --background -a Docker
|
|
sleep 3
|
|
else
|
|
echo "No Docker runtime found (neither Colima nor Docker Desktop)."
|
|
install_docker
|
|
fi
|
|
elif [ "$PLATFORM" == "Linux" ]; then
|
|
echo "Docker is not running. Starting Docker..."
|
|
sudo systemctl start docker
|
|
sleep 3
|
|
else
|
|
echo "Unsupported platform: $PLATFORM"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Check if Docker is installed
|
|
install_docker() {
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
echo "Docker is not installed."
|
|
echo "Options:"
|
|
echo " 1. Install Colima (lightweight, recommended)"
|
|
echo " 2. Install Docker Desktop (official)"
|
|
read -rp "Choose option (1/2): " choice
|
|
|
|
case "$choice" in
|
|
1)
|
|
if command -v brew &>/dev/null; then
|
|
brew install colima
|
|
echo "Colima installed. Starting..."
|
|
colima start
|
|
else
|
|
echo "Homebrew not found. Please install Homebrew first."
|
|
exit 1
|
|
fi
|
|
;;
|
|
2)
|
|
read -rp "Do you want to install Docker Desktop using Homebrew? (y/n): " confirm
|
|
if [ "$confirm" == "y" ]; then
|
|
brew install --cask docker
|
|
echo "Docker Desktop has been installed. Please restart this script."
|
|
else
|
|
echo "Docker is required to run this script. Exiting."
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Invalid choice. Exiting."
|
|
exit 1
|
|
;;
|
|
esac
|
|
exit 0
|
|
elif [ "$PLATFORM" == "Linux" ]; then
|
|
install_docker_linux
|
|
else
|
|
echo "Unsupported platform: $PLATFORM"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Check if docker-compose is installed
|
|
install_docker_compose() {
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
echo "docker-compose is not installed."
|
|
read -rp "Do you want to install docker-compose using Homebrew? (y/n): " choice
|
|
if [ "$choice" == "y" ]; then
|
|
brew install docker-compose
|
|
echo "Docker Compose has been installed. Please restart this script."
|
|
exit 0
|
|
else
|
|
echo "Docker Compose is required to run this script. Exiting."
|
|
exit 1
|
|
fi
|
|
elif [ "$PLATFORM" == "Linux" ]; then
|
|
local pkg_manager
|
|
pkg_manager=$(detect_linux_package_manager)
|
|
|
|
echo "docker-compose is not installed."
|
|
read -rp "Do you want to install docker-compose using $pkg_manager? (y/n): " choice
|
|
if [ "$choice" == "y" ]; then
|
|
case $pkg_manager in
|
|
"apt")
|
|
sudo apt-get update
|
|
sudo apt-get install -y docker-compose
|
|
;;
|
|
"yum"|"dnf")
|
|
sudo "$pkg_manager" install -y docker-compose
|
|
;;
|
|
"pacman")
|
|
sudo pacman -S docker-compose
|
|
;;
|
|
*)
|
|
echo "Unsupported package manager. Please install docker-compose manually."
|
|
exit 1
|
|
;;
|
|
esac
|
|
echo "Docker Compose has been installed. Please restart this script."
|
|
exit 0
|
|
else
|
|
echo "Docker Compose is required to run this script. Exiting."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Unsupported platform: $PLATFORM"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if ! command -v docker &>/dev/null; then
|
|
install_docker
|
|
fi
|
|
|
|
# Check if Docker is running
|
|
if [ "$(docker info >/dev/null 2>&1 && echo "running")" != "running" ]; then
|
|
start_docker
|
|
fi
|
|
|
|
# Check if docker-compose is called
|
|
if [ "$1" == "docker-compose" ]; then
|
|
# If docker-compose is called, check if Docker is running again
|
|
if [ "$(docker info >/dev/null 2>&1 && echo "running")" != "running" ]; then
|
|
if ! command -v docker-compose &>/dev/null; then
|
|
start_docker
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Run the provided command
|
|
"$@"
|