#!/usr/bin/env bash # One-time host setup: installs Docker Engine + the compose plugin from # Docker's own apt repository. # # Separate from dev-env.sh on purpose - this touches the machine (apt, a new # apt source, a usermod), dev-env.sh only touches containers. Run this once, # then use dev-env.sh for everything else. # # Ubuntu-specific, and written for this workspace's WSL2 environment where # PID 1 is not systemd: nothing here enables a service, because there is no # service manager to enable it with. dev-env.sh starts dockerd itself. set -euo pipefail if command -v docker >/dev/null 2>&1; then echo "docker is already installed: $(docker --version)" exit 0 fi . /etc/os-release echo "==> installing Docker Engine for ${ID} ${VERSION_CODENAME}" sudo apt-get update -qq sudo apt-get install -y -qq ca-certificates curl gnupg iptables sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL "https://download.docker.com/linux/${ID}/gpg" \ | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/${ID} ${VERSION_CODENAME} stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update -qq sudo apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin # So dev-env.sh can talk to the daemon without sudo. Needs a fresh login to # take effect, which is why dev-env.sh also falls back to sudo. sudo usermod -aG docker "$USER" || true echo "==> installed: $(docker --version)" echo "==> $(docker compose version)" echo echo "Next: scripts/dev-env.sh up"