Goals
- Install Docker Engine from the official repository
- Enable the Docker Compose plugin
- Run a first test container
- Manage user permissions and autostart
- Update, uninstall, and troubleshoot
Requirements
- SSH access with sudo privileges
- Tested on Debian 12, Ubuntu 22.04 or newer, and RHEL or clones like AlmaLinux or Rocky 9
- Outbound internet access to download.docker.com
1) Remove any old packages (if present)
sudo apt remove -y docker docker-engine docker.io containerd runc || true
sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine || true
2) Install base dependencies
Debian or Ubuntu
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
RHEL, AlmaLinux, or Rocky
sudo dnf -y install curl ca-certificates gnupg dnf-plugins-core
3) Add the official Docker repo and install
Debian or Ubuntu
Add the GPG key and the stable repo, then install.
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo $ID)/gpg | sudo gpg --dearmor -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/$(. /etc/os-release && echo $ID) $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Enable and start Docker.
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
RHEL, AlmaLinux, Rocky
Enable the repo and install.
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
4) Verify and run a first container
Check versions.
docker --version
docker compose version
Test with hello-world.
sudo docker run --rm hello-world
5) Post install: run Docker without sudo
Add your user to the docker group, start a new shell session, and retest.
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world
6) Quick example with Docker Compose
Create a test folder and a minimal docker-compose.yml for Nginx.
mkdir -p ~/compose-nginx && cd ~/compose-nginx
cat > docker-compose.yml <<'YAML'
services:
web:
image: nginx:stable
ports:
- "8080:80"
restart: unless-stopped
YAML
docker compose up -d
docker compose ps
Open http://your-ip:8080 in a browser, then stop when done.
docker compose down
7) Updates
Debian or Ubuntu
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
RHEL, AlmaLinux, or Rocky
sudo dnf upgrade -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
8) Clean uninstall
Debian or Ubuntu
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
RHEL, AlmaLinux, or Rocky
sudo dnf remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
9) Quick troubleshooting
Docker service will not start
sudo journalctl -u docker -n 200 --no-pager
sudo systemctl restart docker
Permission denied on the Docker socket
groups
sudo usermod -aG docker $USER
newgrp docker
Port already in use
sudo ss -ltnp | grep :80
sudo ss -ltnp | grep :443
Conflict with another container engine
sudo systemctl stop podman
sudo systemctl disable podman
sudo systemctl restart docker
Summary
- Official repositories added and Docker Engine installed
- Docker service enabled at boot
- Docker Compose plugin available
- hello-world and Nginx compose example validated
- Update, removal, and troubleshooting steps included


















