Skip to content

Instantly share code, notes, and snippets.

@horacioibrahim
Last active August 9, 2025 14:49
Show Gist options
  • Select an option

  • Save horacioibrahim/139380ffa0e6e485a03e0fb6e6750149 to your computer and use it in GitHub Desktop.

Select an option

Save horacioibrahim/139380ffa0e6e485a03e0fb6e6750149 to your computer and use it in GitHub Desktop.
setup-docker.sh
#!/usr/bin/env bash
# setup-docker.sh — Ubuntu (DigitalOcean)
set -euo pipefail
ADD_USER_TO_DOCKER="${ADD_USER_TO_DOCKER:-false}"
SKIP_HELLO="${SKIP_HELLO:-false}"
log(){ printf "\033[1;34m%s\033[0m %s\n" "›" "$*"; }
ok(){ printf "\033[1;32m%s\033[0m %s\n" "✔" "$*"; }
err(){ printf "\033[1;31m%s\033[0m %s\n" "✖" "$*" >&2; }
require_root(){ [[ "${EUID:-$(id -u)}" -eq 0 ]] || { err "Execute como root: sudo $0"; exit 1; } }
require_root
log "Removendo instalações antigas (se houver)..."
apt-get remove -y docker.io docker-doc docker-compose docker-compose-v2 containerd runc || true
apt-get autoremove -y || true
log "Atualizando pacotes..."
apt-get update -y
apt-get upgrade -y
log "Instalando dependências..."
apt-get install -y ca-certificates curl gnupg
log "Configurando chave GPG e repositório oficial da Docker..."
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
UBUNTU_CODENAME="$(. /etc/os-release && echo "$VERSION_CODENAME")"
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME} stable" \
> /etc/apt/sources.list.d/docker.list
log "Instalando Docker Engine + Buildx + Compose..."
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
log "Habilitando e iniciando serviço docker..."
systemctl enable --now docker
if [[ "$ADD_USER_TO_DOCKER" == "true" ]]; then
TARGET_USER="${SUDO_USER:-$USER}"
if id "$TARGET_USER" >/dev/null 2>&1; then
log "Adicionando usuário '$TARGET_USER' ao grupo docker..."
usermod -aG docker "$TARGET_USER"
ok "Usuário adicionado (faça logout/login para aplicar)."
else
err "Usuário '$TARGET_USER' não encontrado; pulando."
fi
fi
log "Versões instaladas:"
docker --version || true
docker compose version || true
if [[ "$SKIP_HELLO" != "true" ]]; then
log "Executando teste hello-world..."
if docker run --rm hello-world >/dev/null 2>&1; then
ok "hello-world executado com sucesso."
else
err "Falha ao rodar hello-world (sem internet/registry?)."
fi
fi
ok "Docker instalado e ativo."
# Redes
docker network create agnostic_public || true
docker network create agnostic_core || true
docker network create agnostic_config || true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment