Skip to content

Instantly share code, notes, and snippets.

@lincolnaleixo
Last active April 29, 2025 09:17
Show Gist options
  • Save lincolnaleixo/6c303860d95b9a499e8357741d2e5edd to your computer and use it in GitHub Desktop.
Save lincolnaleixo/6c303860d95b9a499e8357741d2e5edd to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
# Helper: wait until no other apt/dpkg process holds the lock
wait_for_apt() {
local LOCK="/var/lib/dpkg/lock-frontend"
echo -n "Waiting for any other apt process to finish..."
while sudo fuser "$LOCK" >/dev/null 2>&1; do
echo -n "."
sleep 3
done
echo " done."
}
# 1) Update & upgrade
wait_for_apt
sudo apt-get update
wait_for_apt
sudo apt-get upgrade -y
# 2) Install prerequisites
wait_for_apt
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# 3) Add Docker’s GPG key & repo
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg \
| sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4) Update again for Docker packages
wait_for_apt
sudo apt-get update
# 5) Install Docker Engine
wait_for_apt
sudo apt-get install -y \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# 6) Ensure 'docker' group exists, add user
sudo groupadd docker 2>/dev/null || true
sudo usermod -aG docker "$USER"
# 7) Append Docker aliases & functions to ~/.bashrc
cat <<'EOF' >> ~/.bashrc
# --- Docker Aliases & Functions ---
alias da="docker attach"
alias dl="docker ps -l -q"
alias diprune="docker image prune"
alias dcprune="docker container prune"
alias dvprune="docker volume prune"
alias dps="docker ps"
alias dpa="docker ps -a"
alias dim="docker images"
dinspectip() { docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$1"; }
alias dkd="docker run -d -P --name"
drun() { docker run -d -it "$1"; }
alias dd='dcuf && dpa'
alias ddd='dcufd && dpa'
alias dlr='docker logs -f'
alias dkdi="docker run -it -d -P --name"
alias dex="docker exec -i -t"
dbash() { docker exec -it "$(docker ps -aqf "name=$1")" bash; }
alias dcs="docker compose stop"
alias drmf='docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)'
alias drmfi='docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) && dri'
dstop() { docker stop $(docker ps -a -q); }
dstart() { docker start $(docker ps -a -q); }
drm() { docker rm $(docker ps -a -q); }
dri() { docker rmi -f $(docker images -q); }
dsr() { docker stop "$1" && docker rm "$1"; }
dir() { docker image rm "$1"; }
dcus() { docker compose up -d --scale "$1=$2"; }
dbu() { DOCKER_BUILDKIT=1 docker build --compress -t="$1" .; }
dbuf() { DOCKER_BUILDKIT=1 docker build --compress -t="$1" -f="$2" .; }
dbuc() { docker build --compress --no-cache -t="$1" .; }
alias dcb="docker compose build"
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcuf="docker compose up -d --force-recreate"
alias dcbuf="docker compose build && docker compose up -d --force-recreate"
alias dcbufnc="docker-compose build --no-cache && docker-compose up -d --force-recreate"
alias dcbufncs="dri && drm && docker-compose build --no-cache && docker-compose up -d --force-recreate --scale api=3"
alias dcbd="docker-compose -f docker-compose.dev.yml build"
alias dcud="docker compose -f docker-compose.dev.yml up -d"
alias dcdd="docker compose -f docker-compose.dev.yml down"
alias dcufd="docker compose -f docker-compose.dev.yml up -d --force-recreate"
alias dcbufd="docker compose -f docker-compose.dev.yml build && docker compose -f docker-compose.dev.yml up -d --force-recreate"
alias dcbufdnc="docker-compose -f docker-compose.dev.yml build --no-cache && docker-compose -f docker-compose.dev.yml up -d --force-recreate"
EOF
echo
echo "✅ Docker installed. Aliases appended to ~/.bashrc."
echo "ℹ️ Log out and back in (or reboot) to apply your new 'docker' group membership."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment