diff --git a/README.md b/README.md index d059489..832bdc7 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ cd ~/server_cli_tools | 2 | **Zsh + Oh-My-Zsh** | Shell, plugins (`zsh-autosuggestions`, `zsh-syntax-highlighting`, `z`), `bira` prompt theme | | 3 | **Aliases + tools** | General, git, and docker aliases with a self-documenting help system (`h`) | | 4 | **Terminal configs** | `bat` theme (base16) | -| 5 | **Docker** | `docker.io` via apt, service enabled, user added to `docker` group, management aliases | +| 5 | **Docker** | Docker Engine + Compose from [Docker's official apt repo](https://docs.docker.com/engine/install/ubuntu/) (`docker-ce`, `docker-compose-plugin`), service enabled, user added to `docker` group, management aliases | | 6 | **Git config** | `git-delta` as pager with side-by-side diffs | > **NOTE:** There's minimal custom theme in `/configs/zsh/zhann-elvis.zsh-theme`. To apply it toggle `ZSH_THEME` and uncomment sourcing it in `~/.zshrc` after install. diff --git a/install.sh b/install.sh index f25d233..c0616d8 100755 --- a/install.sh +++ b/install.sh @@ -221,8 +221,82 @@ install_terminal_configs() { install_docker() { e_info "\n[5/6] Docker" - sudo apt-get update -qq - apt_install docker.io + local docker_packages=( + docker-ce + docker-ce-cli + containerd.io + docker-buildx-plugin + docker-compose-plugin + ) + + if dpkg -s docker-ce &>/dev/null; then + e_info " Docker Engine (official) is already installed" + else + e_info " Installing Docker Engine from Docker's official apt repository..." + + # https://docs.docker.com/engine/install/ubuntu/ + local conflicting=(docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc) + local to_remove=() + for pkg in "${conflicting[@]}"; do + if dpkg -s "$pkg" &>/dev/null; then + to_remove+=("$pkg") + fi + done + if [ ${#to_remove[@]} -gt 0 ]; then + e_warn " Removing conflicting packages: ${to_remove[*]}" + sudo apt-get remove -y "${to_remove[@]}" + fi + + . /etc/os-release + local docker_distro suite + case "$ID" in + ubuntu) + docker_distro=ubuntu + suite="${UBUNTU_CODENAME:-$VERSION_CODENAME}" + ;; + debian) + docker_distro=debian + suite="$VERSION_CODENAME" + ;; + *) + e_warn " Unsupported distro for Docker install ($ID) — skipping engine install" + docker_distro= + ;; + esac + + if [ -n "$docker_distro" ]; then + apt_install ca-certificates curl + + sudo install -m 0755 -d /etc/apt/keyrings + if [ ! -f /etc/apt/keyrings/docker.asc ]; then + sudo curl -fsSL "https://download.docker.com/linux/$docker_distro/gpg" -o /etc/apt/keyrings/docker.asc + sudo chmod a+r /etc/apt/keyrings/docker.asc + fi + + if [ ! -f /etc/apt/sources.list.d/docker.sources ]; then + sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null </dev/null; then + sudo apt-get update -qq + apt_install docker-compose-plugin + fi + + if command_exists docker && docker compose version &>/dev/null; then + e_info " Docker Compose plugin is available ($(docker compose version --short 2>/dev/null || docker compose version))" + fi if command_exists systemctl; then sudo systemctl enable --now docker 2>/dev/null || @@ -397,7 +471,7 @@ COMPONENTS=( "Zsh + Oh-My-Zsh (shell, plugins)" "Aliases + custom tools" "Terminal configs (bat)" - "Docker (engine + aliases)" + "Docker (engine + compose + aliases)" "Git config (delta pager)" )